Pandas Crosstabulation y contando

Estoy usando Python Pandas. Tengo una columna con una cadena y me gustaría tener el cruce entre las columnas.

Por ejemplo, tengo la siguiente entrada

1: Andi 2: Andi, Cindy 3: Thomas, Cindy 4: Cindy, Thomas 

Y me gustaría tener la siguiente salida:

Por lo tanto, la combinación de Andi y Thomas no aparece en los datos, pero Cindy y Thomas aparecen dos veces.

  Andi Thomas Cindy Andi 1 0 1 Thomas 0 1 2 Cindy 1 2 1 

¿Alguien tiene alguna idea de cómo podría manejar esto? ¡Eso sería realmente genial!

Muchas gracias y saludos,

Y yo

Puedes generar las columnas ficticias primero:

 df['A'].str.get_dummies(', ') Out: Andi Cindy Thomas 0 1 0 0 1 1 1 0 2 0 1 1 3 0 1 1 

Y usa eso en el producto punto:

 tab = df['A'].str.get_dummies(', ') tab.T.dot(tab) Out: Andi Cindy Thomas Andi 2 1 0 Cindy 1 3 2 Thomas 0 2 2 

Las entradas diagonales le darán el número de ocurrencias para cada persona. Si necesita establecer las diagonales en 1, hay varias alternativas . Uno de ellos es np.fill_diagonal de numpy.

 co_occurrence = tab.T.dot(tab) np.fill_diagonal(co_occurrence.values, 1) co_occurrence Out: Andi Cindy Thomas Andi 1 1 0 Cindy 1 1 2 Thomas 0 2 1