Cách sau chậm hơn các cách tiếp cận được tính thời gian ở đây , nhưng chúng ta có thể tính toán cột phụ dựa trên nội dung của nhiều cột và hơn hai giá trị có thể được tính cho cột phụ.
Ví dụ đơn giản chỉ sử dụng cột "Đặt":
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
Ví dụ với nhiều màu sắc hơn và nhiều cột được tính đến:
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
Chỉnh sửa (21/06/2019): Sử dụng plydata
Cũng có thể sử dụng plydata để làm những việc này (điều này dường như còn chậm hơn so với việc sử dụng assign
và apply
, mặc dù).
from plydata import define, if_else
Đơn giản 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
Lồng nhau 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