Python 熊猫。2列数据帧。获取相交矩阵(从列1到列)
我有一个这样的数据框架(基本上有两列:第一列包含blogger id,第二列包含followers): 我想要得到的是一个平方矩阵,它具有所有对所有的交集计数,如下所示:Python 熊猫。2列数据帧。获取相交矩阵(从列1到列),python,pandas,numpy,Python,Pandas,Numpy,我有一个这样的数据框架(基本上有两列:第一列包含blogger id,第二列包含followers): 我想要得到的是一个平方矩阵,它具有所有对所有的交集计数,如下所示: A B C A - 4 3 B 4 - 6 C 3 6 - 我不是一个熟练的pandas用户,我所做的就是使用2个循环和np.intersect来实现这一点,我认为这是没有效率的。我一直在尝试使用pivot_table()、crosstab()和groupby()-运气不好
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 = j.astype(object)
j.values[[np.arange(j.shape[0])] * 2] = '-'
请注意,这会破坏性能,因为您的列现在是对象类型,这是在同一列中混合不同类型值的唯一方法。太棒了!工作速度要快很多倍。非常感谢。
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 -