python - Pandas 。 2 列数据框。获取交集矩阵(全部到全部,来自第 #1 列)

标签 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   -

我不是一个熟练的 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/

相关文章:

python - 类型错误 : askopenfilename() missing 1 required positional argument: 'root' In [ ]:

Python XPath 结果仅显示 []

python - 类(class)要求我为朴素贝叶斯模型 python 提供 self

python - 直接在 pandas 中打开网站上的 csv 文件,无需下载到文件夹

python - 具有不同阈值的 pandas 数据帧上的多个 if 条件

python - 如何从某一行开始将 numpy 数组写入 .txt 文件?

python - pandas - 如何根据日期组织数据框并将新值分配给列

python - Pandas groupby 查找两个日期时间列之间的差异

python-3.x - optimize.fmin_tnc 没有在 scipy.optimize 中给出正确的答案?

Python - 将数据帧切片为几个较小的数据帧