2017-03-15 5 views
4

ich einen Datenrahmen der Form haben:erstellen Adjazenzmatrix für zwei Spalten in Pandas Datenrahmen

index Name_A Name_B 
    0 Adam Ben 
    1 Chris David 
    2 Adam Chris 
    3 Ben  Chris 

Und ich möchte die Adjazenzmatrix für Name_A und Name_B erhalten, das heißt:

 Adam Ben Chris David 
Adam 0 1 1  0 
Ben 0 0 1  0 
Chris 0 0 0  1 
David 0 0 0  0 

Welchen pythonisch/skalierbaren Ansatz haben sie?

EDIT: Auch weiß ich, dass, wenn die Zeile Adam, Ben im Datensatz ist, dann an einem anderen Punkt, Ben, Adam wird auch im Datensatz sein.

Antwort

5

können Sie crosstab verwenden und dann reindex durch union von Spalten- und Indexwerte:

df = pd.crosstab(df.Name_A, df.Name_B) 
print (df) 
Name_B Ben Chris David 
Name_A     
Adam  1  1  0 
Ben  0  1  0 
Chris  0  0  1 

df = pd.crosstab(df.Name_A, df.Name_B) 
idx = df.columns.union(df.index) 
df = df.reindex(index = idx, columns=idx, fill_value=0) 
print (df) 
     Adam Ben Chris David 
Adam  0 1  1  0 
Ben  0 0  1  0 
Chris  0 0  0  1 
David  0 0  0  0 
+0

Danke, das ist genau das, was ich suchte. –

Verwandte Themen