Wie kann ich eine mehrwertige kategoriale Variable aus dem Pandas-Datenrahmen binär codieren?

9

Angenommen, wir haben den folgenden Datenrahmen mit mehreren Werten für eine bestimmte Spalte:

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

Wie können wir so einen Tisch bekommen?

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

Hinweis: Ich benötige nicht unbedingt einen neuen Datenrahmen. Ich frage mich, wie ich solche Datenrahmen in ein Format umwandeln kann, das für maschinelles Lernen besser geeignet ist.

LDGN
quelle

Antworten:

7

Wenn [0, 1, 2]es sich um numerische Bezeichnungen handelt und nicht um den Index, pandas.DataFrame.pivot_tablefunktioniert dies:

Im []:
data = pd.DataFrame.from_records (
    [[0, 'A'], [0, 'B'], [1, 'B'], [1, 'C'], [1, 'D'], [2, 'B'], [ 2, 'D']],
    Spalten = ['number_label', 'category'])
data.pivot_table (index = ['number_label'], column = ['category'], aggfunc = [len], fill_value = 0)
Aus[]:
              len
Kategorie ABCD
number_label                       
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1

Dieser Blog-Beitrag war hilfreich: http://pbpython.com/pandas-pivot-table-explained.html


Wenn [0, 1, 2]ist der Index, dann collections.Counterist nützlich:

Im []:
data2 = pd.DataFrame.from_dict (
    {'Kategorien': {0: ['A', 'B'], 1: ['B', 'C', 'D'], 2: ['B', 'D']}})
data3 = data2 ['Kategorien']. anwenden (Sammlungen.Zähler)
pd.DataFrame.from_records (data3) .fillna (Wert = 0)
Aus[]:
       A B C D
0 1 1 0 0
1 0 1 1 1
2 0 1 0 1
Samuel Harrold
quelle
Danke, ich werde es überprüfen. Tatsächlich sind 0, 1 und 2 der Index. Haben Sie auch eine Idee, wie mit Sparsamkeit hier effizient umgegangen werden kann, da es viele Nullen gibt?
LDGN
Sowohl Pandas als auch Scipy verfügen über spärliche Datenstrukturen ( Pandas Sparse , Scipy Sparse ) zum Speichern von Speicher, werden jedoch möglicherweise von der von Ihnen verwendeten Bibliothek für maschinelles Lernen nicht unterstützt. Wenn die Dimensionalität Ihres Problems (Anzahl der Spalten) so groß ist, dass eine spärliche Darstellung erforderlich ist, sollten Sie auch die Verwendung von Techniken zur Reduzierung der Dimensionalität in Betracht ziehen .
Samuel Harrold