【问题标题】:Python Data Frame summaryPython 数据框总结
【发布时间】:2021-10-04 05:57:20
【问题描述】:

我有数据框(下面的 df 表): 每个用户都可以在任何类别中发帖。我必须计算有多少不同的用户在 A 类中有帖子,同时在 B、C 和 D 类中有帖子。表格如下:

User Category
1 A
1 B
33 B
33 C
33 D
54 A
54 B
87 A
87 B
87 C
87 D

总表为 950,000 行 它要么在数据透视表(变体 1)中给出 Nan 结果,要么在内存溢出(变体 2)中给出结果。必要的结果是

Category A B C D
A 3 3 1 1
B 3 4 2 1
C 1 2 2 2
D 1 1 2 2

对角线:A-B-C-D - 每个类别中发布的总数,上下三角形相同,并且是在 B 和 C 中发布的用户数量的交集。

我试过了

  1. df.pivot_table(values=['user','category'],index=['category'], columns=['category'],aggfunc=np.count_nonzero)

  2. a = df.values

d = {(i, j): np.mean(a[:, i] == a[:, j]) for i, j in combination(range(a.shape[1]), 2) }

res, c, vals = np.zeros((a.shape[1], a.shape[1])),
list(map(list, zip(*d.keys()))), list(d.values())

res[c[0], c[1]] = vals

res_df = pd.DataFrame(res, columns=df.columns, index=df.columns)

请你帮忙出主意。谢谢。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    一个想法是使用mergecrosstab,例如:

    df = df.merge(df, on='User')
    df = pd.crosstab(df['Category_x'], df['Category_y'])
    print (df)
    Category_y  A  B  C  D
    Category_x            
    A           3  3  1  1
    B           3  4  2  2
    C           1  2  2  2
    D           1  2  2  2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多