Создание матрицы смежности для двух столбцов в Pandas dataframe
у меня есть фрейм данных формы:
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
каков их самый питонический / масштабируемый способ решения этой проблемы?
EDIT: кроме того, я знаю, что если строки Adam, Ben
находится в наборе данных, затем в какой-то другой момент, Ben, Adam
также будет в наборе данных.
1 ответов
можно использовать crosstab
а то reindex
by 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