在特定位置将值插入/追加到pandas列,而不替换现有值



我想要条件添加到"备注";列而不覆盖它。我有以下数据帧。

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'

最新更新