Como codificar binário variável categórica com vários valores do dataframe do Pandas?

9

Suponha que tenhamos o seguinte quadro de dados com vários valores para uma determinada coluna:

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

Como podemos obter uma mesa como esta?

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

Nota: Não preciso necessariamente de um novo quadro de dados; estou pensando em como transformar esses DataFrames em um formato mais adequado para aprendizado de máquina.

Denis L
fonte

Respostas:

7

Se [0, 1, 2]são etiquetas numéricas e não é o índice, pandas.DataFrame.pivot_tablefunciona:

No []:
data = pd.DataFrame.from_records (
    [[0, 'A'], [0, 'B'], [1, 'B'], [1, 'C'], [1, 'D'], [2, 'B'], [ 2, 'D']],
    columns = ['number_label', 'category'])
data.pivot_table (index = ['number_label'], colunas = ['category'], aggfunc = [len], fill_value = 0)
Fora[]:
              len
categoria ABCD
number_label                       
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Esta postagem do blog foi útil: http://pbpython.com/pandas-pivot-table-explained.html


Se [0, 1, 2]é o índice, collections.Counteré útil:

No []:
data2 = pd.DataFrame.from_dict (
    {'categorias': {0: ['A', 'B'], 1: ['B', 'C', 'D'], 2: ['B', 'D']}})
data3 = data2 ['categorias']. apply (collections.Counter)
pd.DataFrame.from_records (data3) .fillna (valor = 0)
Fora[]:
       ABCD
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1
Samuel Harrold
fonte
Obrigado, vou dar uma olhada. Na verdade, 0, 1 e 2 são o índice. Além disso, você tem alguma idéia de como a escassez pode ser tratada com eficiência aqui, pois existem muitos zeros?
Denis L
Tanto o panda quanto o scipy possuem estruturas de dados esparsas ( pandas esparsos , scipy esparsos ) para economizar memória, mas elas podem não ser suportadas pela biblioteca de aprendizado de máquina usada. Se a dimensionalidade do seu problema (número de colunas) for tão grande que seja necessária uma representação esparsa, convém considerar também o uso de técnicas de redução de dimensionalidade .
Samuel Harrold