Come codificare binariamente la variabile categoriale a più valori dal frame di dati Pandas?


9

Supponiamo di avere il seguente frame di dati con più valori per una determinata colonna:

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

Come possiamo ottenere un tavolo come questo?

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

Nota: non ho necessariamente bisogno di un nuovo dataframe, mi chiedo come trasformare tali DataFrames in un formato più adatto all'apprendimento automatico.

Risposte:


7

Se [0, 1, 2]sono etichette numeriche e non è l'indice, allora pandas.DataFrame.pivot_tablefunziona:

In []:
data = pd.DataFrame.from_records (
    [[0, 'A'], [0, 'B'], [1, 'B'], [1, 'C'], [1, 'D'], [2, 'B'], [ 2, 'D']],
    colonne = ['etichetta_numero', 'categoria'])
data.pivot_table (index = ['number_label'], colonne = ['categoria'], aggfunc = [len], fill_value = 0)
Su[]:
              len
categoria ABCD
numero_etichetta                       
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Questo post sul blog è stato utile: http://pbpython.com/pandas-pivot-table-explained.html


Se [0, 1, 2]è l'indice, allora collections.Counterè utile:

In []:
data2 = pd.DataFrame.from_dict (
    {'categorie': {0: ['A', 'B'], 1: ['B', 'C', 'D'], 2: ['B', 'D']}})
data3 = data2 ['categorie']. apply (collections.Counter)
pd.DataFrame.from_records (data3) .fillna (valore = 0)
Su[]:
       ABCD
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Grazie, lo controllerò. In realtà, 0, 1 e 2 sono l'indice. Inoltre, hai idea di come la scarsità possa essere gestita in modo efficiente qui in quanto vi sono molti zero?
Denis L

Sia i panda che lo scipy hanno strutture di dati sparse ( padas sparse , scipy sparse ) per risparmiare memoria, ma potrebbero non essere supportate dalla libreria di machine learning che usi. Se la dimensionalità del tuo problema (numero di colonne) è così grande che è necessaria una rappresentazione sparsa, potresti prendere in considerazione anche l'uso di tecniche di riduzione della dimensionalità .
Samuel Harrold,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.