Das Folgende ist langsamer als die hier zeitgesteuerten Ansätze , aber wir können die zusätzliche Spalte basierend auf dem Inhalt von mehr als einer Spalte berechnen, und es können mehr als zwei Werte für die zusätzliche Spalte berechnet werden.
Einfaches Beispiel mit nur der Spalte "Set":
def set_color(row):
if row["Set"] == "Z":
return "red"
else:
return "green"
df = df.assign(color=df.apply(set_color, axis=1))
print(df)
Set Type color
0 Z A red
1 Z B red
2 X B green
3 Y C green
Beispiel mit mehr Farben und mehr Spalten berücksichtigt:
def set_color(row):
if row["Set"] == "Z":
return "red"
elif row["Type"] == "C":
return "blue"
else:
return "green"
df = df.assign(color=df.apply(set_color, axis=1))
print(df)
Set Type color
0 Z A red
1 Z B red
2 X B green
3 Y C blue
Bearbeiten (21/06/2019): Verwenden von Plydata
Es ist auch möglich, Plydata zu verwenden, um diese Art von Dingen auszuführen (dies scheint jedoch noch langsamer zu sein als die Verwendung von assign
und apply
).
from plydata import define, if_else
Einfach if_else
:
df = define(df, color=if_else('Set=="Z"', '"red"', '"green"'))
print(df)
Set Type color
0 Z A red
1 Z B red
2 X B green
3 Y C green
Verschachtelt if_else
:
df = define(df, color=if_else(
'Set=="Z"',
'"red"',
if_else('Type=="C"', '"green"', '"blue"')))
print(df)
Set Type color
0 Z A red
1 Z B red
2 X B blue
3 Y C green