Python 熊猫。2列数据帧。获取相交矩阵(从列1到列)

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()-运气不好

我有一个这样的数据框架(基本上有两列:第一列包含blogger id,第二列包含followers):

我想要得到的是一个平方矩阵,它具有所有对所有的交集计数,如下所示:

    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  -