熊猫交叉和计数

时间:2017-07-10 16:19:28

标签: python pandas

我正在使用Python Pandas。我有一个带字符串的列,我希望列之间有交叉。

E.g我有以下输入

1: Andi
2: Andi, Cindy
3: Thomas, Cindy
4: Cindy, Thomas

我希望得到以下结果:

因此,Andi和Thomas的组合没有出现在数据中,但Cindy和Thomas出现了两次。

          Andi  Thomas  Cindy
    Andi    1     0      1
    Thomas  0     1      2
    Cindy   1     2      1

有人知道如何处理这个问题吗?那真是太棒了!

非常感谢和问候,

岸堤

1 个答案:

答案 0 :(得分:9)

您可以先生成虚拟列:

df['A'].str.get_dummies(', ')
Out: 
   Andi  Cindy  Thomas
0     1      0       0
1     1      1       0
2     0      1       1
3     0      1       1

并在点积中使用它:

tab = df['A'].str.get_dummies(', ')

tab.T.dot(tab)
Out: 
        Andi  Cindy  Thomas
Andi       2      1       0
Cindy      1      3       2
Thomas     0      2       2

对角线条目将为您提供每个人的出现次数。如果您需要将对角线设置为1,则有several alternatives。其中一个是来自numpy的np.fill_diagonal

co_occurrence = tab.T.dot(tab)    
np.fill_diagonal(co_occurrence.values, 1)    
co_occurrence
Out: 
        Andi  Cindy  Thomas
Andi       1      1       0
Cindy      1      1       2
Thomas     0      2       1