2017-07-10 69 views
5

我正在使用Python熊貓。我有一個字符串的列,我想在列之間交叉。熊貓交叉製表和計數

例如,我有以下的輸入

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

我想有以下輸出:

因此,安迪和托馬斯的組合不會出現在該數據,但Cindy和托馬斯出現兩次。

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

有人知道我該如何處理這個問題嗎?那真是太棒了!

非常感謝和問候,

安迪

回答

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 
+1

很好的答案! ( - ; – piRSquared

+0

@piRSquared謝謝:) – ayhan

+2

@ayhan這就是我喜歡Stack Overflow的原因。我學會了使用'.dot'來計算系列中的交叉表報告。 +1 –