我有一个像这样的数据框(基本上有两列:第一列包含博主 ID,第二列包含关注者):
blogger follower
A c
A d
A e
A f
A g
A h
A i
A j
A k
B c
B f
B g
B l
B m
B n
B o
B p
B q
B r
B s
B t
B k
C a
C k
C r
C g
C t
C c
C p
C y
C z
C w
我想要得到的是一个具有所有交集计数的方阵,如下所示:
A B C
A - 4 3
B 4 - 6
C 3 6 -
我不是一个熟练的 pandas 用户,我所实现的只是通过使用 2 个循环和 np.intersect 来完成此操作,我认为这效率不高。我一直在尝试使用pivot_table(),crosstab()和groupby() - 没有运气,所以不幸的是没有代码可以分享。也许这里有人知道有效的解决方案?
最佳答案
执行自合并
,然后进行交叉表
计算操作。
i = df.merge(df, on='follower')
j = pd.crosstab(i.blogger_x, i.blogger_y)
j
blogger_y A B C
blogger_x
A 9 4 3
B 4 13 6
C 3 6 10
当然,对角线不是-
,但这很容易。
j = j.astype(object)
j.values[[np.arange(j.shape[0])] * 2] = '-'
j
blogger_y A B C
blogger_x
A - 4 3
B 4 - 6
C 3 6 -
请注意,这会破坏性能,因为您的列现在是对象类型,这是在同一列中混合不同类型的值的唯一方法。
关于python - Pandas 。 2 列数据框。获取交集矩阵(全部到全部,来自第 #1 列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321139/