2017-07-10 17 views
5

Używam Pand Python. Mam kolumnę z ciągiem i chciałbym mieć przejście między kolumnami.Parsowanie krzyżów i liczenie

Np Mam następujący wejście

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

I chciałbym mieć następujący wynik:

Stąd połączenie Andi i Thomas nie pojawia się w danych, ale Cindy i Thomas pojawia się dwa razy.

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

Czy ktoś ma pojęcie, jak sobie z tym poradzić? To byłoby naprawdę świetne!

Wielkie dzięki i pozdrowienia,

Andi

Odpowiedz

9

Można wygenerować manekina kolumn pierwszy:

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 

i użyć jej w produkcie DOT:

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 

Ukośne wpisy poda liczbę zdarzeń dla każdej osoby. Jeśli chcesz ustawić przekątne na 1, istnieje several alternatives. Jednym z nich jest np.fill_diagonal od 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

świetna odpowiedź! (-; – piRSquared

+0

@piRSquared Dziękuję. :) – ayhan

+2

@ayhan Jest to powód, dla którego lubię Stack Overflow. Uczę się wielkiego wykorzystania '.dot' do obliczania raportów krzyżowych z serii. +1 –