¿Cómo codificar binariamente una variable categórica de valores múltiples desde el marco de datos de Pandas?

9

Supongamos que tenemos el siguiente marco de datos con múltiples valores para una determinada columna:

    categories
0 - ["A", "B"]
1 - ["B", "C", "D"]
2 - ["B", "D"]

¿Cómo podemos obtener una mesa como esta?

   "A"  "B"  "C"  "D"
0 - 1    1    0    0
1 - 0    1    1    1
2 - 0    1    0    1

Nota: No necesito necesariamente un nuevo marco de datos, me pregunto cómo transformar dichos marcos de datos en un formato más adecuado para el aprendizaje automático.

Denis L
fuente

Respuestas:

7

Si [0, 1, 2]son etiquetas numéricas y no es el índice, entonces pandas.DataFrame.pivot_tablefunciona:

En []:
data = pd.DataFrame.from_records (
    [[0, 'A'], [0, 'B'], [1, 'B'], [1, 'C'], [1, 'D'], [2, 'B'], [ 2, 'D']],
    columnas = ['número_etiqueta', 'categoría'])
data.pivot_table (index = ['número_etiqueta'], columnas = ['categoría'], aggfunc = [len], fill_value = 0)
Fuera[]:
              Len
categoría ABCD
etiqueta_número                       
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Esta publicación de blog fue útil: http://pbpython.com/pandas-pivot-table-explained.html


Si [0, 1, 2]es el índice, entonces collections.Counteres útil:

En []:
data2 = pd.DataFrame.from_dict (
    {'categorías': {0: ['A', 'B'], 1: ['B', 'C', 'D'], 2: ['B', 'D']}})
data3 = data2 ['categorías']. apply (collections.Counter)
pd.DataFrame.from_records (data3) .fillna (valor = 0)
Fuera[]:
       A B C D
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1
Samuel Harrold
fuente
Gracias, lo comprobaré. En realidad, el 0, 1 y 2 son el índice. Además, ¿tiene alguna idea de cómo la escasez se puede manejar de manera eficiente aquí ya que hay muchos ceros?
Denis L
Tanto pandas como scipy tienen estructuras de datos dispersas ( pandas dispersas , scipy dispersas ) para ahorrar memoria, pero es posible que no sean compatibles con la biblioteca de aprendizaje automático que utiliza. Si la dimensionalidad de su problema (número de columnas) es tan grande que es necesaria una representación escasa, puede considerar también el uso de técnicas de reducción de dimensionalidad .
Samuel Harrold el