2017-07-10 21 views
5

Python Panda'ları kullanıyorum. Bir dizgiye sahip bir sütunum var ve sütunlar arasında geçiş yapmak istiyorum.Pandalar Çaprazlama ve sayma

Örneğin aşağıdaki giriş

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

var Ve ben şu çıktıyı istiyorum: Dolayısıyla

, veri görünmüyor Andi ve Thomas kombinasyonunu ama Cindy ve Thomas iki kere görünüyor.

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

Birisi bununla nasıl başedebileceğimi biliyor mu? Bu gerçekten harika olurdu!

Çok teşekkürler ve Saygılarımızla,

Andi

cevap

9

Önce kukla sütunları oluşturabilir:

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 

Ve nokta ürününde olduğu kullanın:

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 

Çapraz girişleri Her kişi için olay sayısını verecektir. Diyagonalleri 1'e ayarlamanız gerekiyorsa, several alternatives vardır. Bunlardan biri numpy'den 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

great answer! (-; – piRSquared

+0

@piRSquared Teşekkürler. :) – ayhan

+2

@ayhan Bu yüzden Overflow Aktarımı'nı kullanmamın nedeni budur. Seriden çapraz raporları hesaplamak için '.dot'un büyük bir kullanımını öğreniyorum. +1 –