Tengo un dataframe de la forma:
index Name_A Name_B 0 Adam Ben 1 Chris David 2 Adam Chris 3 Ben Chris
Y me gustaría obtener la matriz de adyacencia para Name_A
y Name_B
, es decir:
Adam Ben Chris David Adam 0 1 1 0 Ben 0 0 1 0 Chris 0 0 0 1 David 0 0 0 0
¿Cuál es la manera más python / escalable de abordar esto?
EDITAR: También, sé que si la fila Adam, Ben
está en el conjunto de datos, en algún otro punto, Ben, Adam
también estará en el conjunto de datos.
Puede usar la crosstab
reindex
crosstab
y luego reindex
por union
de valores de columna e índice:
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