Tengo un marco de datos 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 forma más pitónica/escalable de abordar esto?
EDITAR: Además, sé que si la fila Adam, Ben está en el conjunto de datos, entonces en algún otro punto, Ben, Adam también estará en el conjunto de datos.
Puede usar 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