2017-07-10 6 views
5

Ich benutze Python Pandas. Ich habe eine Spalte mit einer Schnur und ich möchte die Kreuzung zwischen den Spalten haben.Pandas Crosstabulation und Zählen

Eg Ich habe die folgende Eingabe bekam

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

Und ich möchte die folgende Ausgabe haben:

daher die Kombination von Andi und Thomas erscheint nicht in den Daten, aber Cindy und Thomas erscheint zweimal.

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

Hat jemand eine Idee, wie ich damit umgehen könnte? Das wäre wirklich toll!

Vielen Dank und Grüße,

Andi

Antwort

9

können Sie die Dummy-Spalten erzeugen zuerst:

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 

Und das Produkt in dem Punkt verwenden:

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 

Diagonal Einträge gibt Ihnen die Anzahl der Vorkommnisse für jede Person. Wenn Sie die Diagonalen auf 1 setzen müssen, gibt es several alternatives. Einer von ihnen ist np.fill_diagonal von numpy.

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

große Antwort! (-; – piRSquared

+0

@piRSquared Danke. :) – ayhan

+2

@ayhan Dies ist der Grund, warum ich Stack Overflow mag. Ich lerne eine große Verwendung von '.dot', um Kreuztabellenberichte aus Serien zu berechnen. +1 –

Verwandte Themen