Come codificare binaria multivalore variabile categoriale da Panda dataframe?
Domanda
Supponiamo di avere il seguente dataframe con più valori per una determinata colonna:
categories
0 - ["A", "B"]
1 - ["B", "C", "D"]
2 - ["B", "D"]
Come si può 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 una nuova dataframe, mi chiedo come trasformare tali DataFrames in un formato più adatto per l'apprendimento automatico
Soluzione
Se [0, 1, 2]
sono etichette numeriche e non è l'indice, quindi opere pandas.DataFrame.pivot_table
:
In []: 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'], columns=['category'], aggfunc=[len], fill_value=0)
Out[]: len category A B C D number_label 0 1 1 0 0 1 0 1 1 1 2 0 1 0 1
Questo post è stato utile: http://pbpython.com/pandas-pivot- tavolo-explained.html
Se [0, 1, 2]
è l'indice, poi collections.Counter
è utile:
In []: data2 = pd.DataFrame.from_dict( {'categories': {0: ['A', 'B'], 1: ['B', 'C', 'D'], 2:['B', 'D']}}) data3 = data2['categories'].apply(collections.Counter) pd.DataFrame.from_records(data3).fillna(value=0)
Out[]: A B C D 0 1 1 0 0 1 0 1 1 1 2 0 1 0 1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a datascience.stackexchange