2017-03-15 261 views
4

我有以下形式的数据帧创建邻接矩阵:对大熊猫数据帧的两列

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

而且我想获得的邻接矩阵Name_AName_B,即:

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

什么是他们处理这个最pythonic /可扩展的方式?

编辑:另外,我知道,如果行Adam, Ben是在数据集中,然后在其他一些点,Ben, Adam也将在数据集中。

回答

5

您可以通过列和索引值的union使用crosstab然后reindex

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

谢谢,这正是我一直在寻找。 –