Ich analysiere einen Datensatz, der in seiner Form dem folgenden Beispiel ähnelt. Ich habe zwei verschiedene Arten von Daten (abc Daten und xyz Daten):Effizientes Erstellen zusätzlicher Spalten in einem Pandas DataFrame mit .map()
abc1 abc2 abc3 xyz1 xyz2 xyz3
0 1 2 2 2 1 2
1 2 1 1 2 1 1
2 2 2 1 2 2 2
3 1 2 1 1 1 1
4 1 1 2 1 2 1
Ich möchte eine Funktion erstellen, die eine Kategorisierungs Spalte für jede abc Spalte ergänzt, die in der Datenrahmen existiert. Mithilfe von Listen mit Spaltennamen und einem Wörterbuch für die Kategoriezuordnung konnte ich das gewünschte Ergebnis erzielen.
abc_columns = ['abc1', 'abc2', 'abc3']
xyz_columns = ['xyz1', 'xyz2', 'xyz3']
abc_category_columns = ['abc1_category', 'abc2_category', 'abc3_category']
categories = {1: 'Good', 2: 'Bad', 3: 'Ugly'}
for i in range(len(abc_category_columns)):
df3[abc_category_columns[i]] = df3[abc_columns[i]].map(categories)
print df3
Das Endergebnis:
abc1 abc2 abc3 xyz1 xyz2 xyz3 abc1_category abc2_category abc3_category
0 1 2 2 2 1 2 Good Bad Bad
1 2 1 1 2 1 1 Bad Good Good
2 2 2 1 2 2 2 Bad Bad Good
3 1 2 1 1 1 1 Good Bad Good
4 1 1 2 1 2 1 Good Good Bad
Während die for
Schlaufe am Ende funktioniert gut, ich fühle mich wie sollte ich lambda
Funktion Python verwenden, aber kann nicht scheinen, um es herauszufinden.
Gibt es eine effizientere Möglichkeit, eine dynamische Anzahl von abc-Typ-Spalten zuzuordnen?
Andy, vielen Dank! –
@AndyHayden, was ist der Unterschied zwischen .applymap auf einem Datenrahmen und .map auf einem Pandas Datenrahmen? – yoshiserry
@yoshiserry applymap tut es für jede Zelle, anstatt jede Zeile/Spalte. –