我正在使用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
有人知道如何处理这个问题吗?那真是太棒了!
非常感谢和问候,
岸堤
答案 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