次の形式のデータフレームがあります:
index Name_A Name_B
0 Adam Ben
1 Chris David
2 Adam Chris
3 Ben Chris
Name_A
そして、との隣接行列を取得したいと思いますName_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
これに取り組む最も Python 的/スケーラブルな方法は何でしょうか?
編集:また、行がAdam, Ben
データセット内にある場合、他の時点でBen, Adam
もデータセット内にあることがわかっています。
ベストアンサー1
使用できますcrosstab
その後reindex
によるunion
列とインデックスの値:
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