大熊猫。 2 col数据帧。获得交集矩阵(全部来自col#1)

时间:2018-01-18 12:16:04

标签: python pandas numpy

我有一个像这样的数据框(基本上是两列:首先包含博客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   -

我不是一个熟练的熊猫用户,我所做的就是通过使用2个循环和np.intersect来实现这一点,我认为这样做效率不高。我一直试图使用pivot_table(),crosstab()和groupby() - 没有运气,所以很遗憾没有代码可以分享。也许有人知道一个有效的解决方案吗?

1 个答案:

答案 0 :(得分:5)

执行自我merge,然后执行crosstab操作。

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  -

请注意,这会破坏性能,因为您的列现在是对象类型,这是在同一列中混合不同类型的值的唯一方法。