我想要条件添加到"备注";列而不覆盖它。我有以下数据帧。
remark Rule1 Rule2
Banana False False
Apple True False
Orange False True
Kiwi True True
如果Rule1==为True,则为红色;如果Rule2==真,则为黄色
我已经写了下面的代码,但它覆盖了现有的值。
data.loc[data['Rule1']==True,"remark"] = "Red"
data.loc[data['Rule2']==True,"remark"] = "Yellow"
预期输出应该是这样的:
remark Rule1 Rule2
Banana False False
Apple, Red True False
Orange,Yellow False True
Kiwi, Red, Yellow True True
让我们试试dot
df.remark = df.remark + ',' + df[['Rule1','Rule2']].dot(pd.Index(['Red,','Yellow,']))
df.remark = df.remark.str[:-1]
df
Out[88]:
remark Rule1 Rule2
0 Banana False False
1 Apple,Red True False
2 Orange,Yellow False True
3 Kiwi,Red,Yellow True True
这是重新分配值,因为您根据条件直接将备注的值设置为红色或黄色,而不是串联。您可以通过使用+=
作为-来修改代码来做到这一点
data.loc[data['Rule1']==True,"remark"] += ', Red'
data.loc[data['Rule2']==True,"remark"] += ', Yellow'
remark Rule1 Rule2
0 Banana False False
1 Apple, Red True False
2 Orange, Yellow False True
3 Kiwi, Red, Yellow True True
(确保您的data.reset_index()
incase comments列在索引中(
PS。BEN_YO的方法是你应该花时间研究的有趣方法。
如果你有你在评论中提到的奶奶,那么你可以做以下事情来完全避免他们。
data.loc[(data['Rule1']==True) & (data['remark'].notna()),"remark"] += ', Red'
data.loc[(data['Rule2']==True) & (data['remark'].notna()),"remark"] += ', Yellow'