【发布时间】: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 中发布的用户数量的交集。
我试过了
-
df.pivot_table(values=['user','category'],index=['category'], columns=['category'],aggfunc=np.count_nonzero)
-
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)
请你帮忙出主意。谢谢。
【问题讨论】: