Python 在特定位置向列插入/追加值,而不替换现有值

Python 在特定位置向列插入/追加值,而不替换现有值,python,pandas,dataframe,Python,Pandas,Dataframe,我希望有条件地添加到“备注”列,而不覆盖它。 我有以下数据帧 remark Rule1 Rule2 Banana False False Apple True False Orange False True Kiwi True True 如果规则1==真,则为红色;如果规则2==真,则为黄色 我已经写了下面的代码,但它正在覆盖现有的值 data.loc[data['Rule1']==True,"remark&qu

我希望有条件地添加到“备注”列,而不覆盖它。 我有以下数据帧

remark    Rule1    Rule2

Banana    False    False
Apple     True     False
Orange    False    True
Kiwi      True     True
如果规则1==真,则为红色;如果规则2==真,则为黄色

我已经写了下面的代码,但它正在覆盖现有的值

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

让我们试试
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'
(确保
data.reset_index()
incase备注列位于索引中)

PS.BEN_YO的方法是一个有趣的方法,你应该花时间在上面


如果您有您在评论中提到的NAN,那么您可以执行以下操作以完全避免它们

data.loc[(data['Rule1']==True) & (data['remark'].notna()),"remark"] += ', Red'
data.loc[(data['Rule2']==True) & (data['remark'].notna()),"remark"] += ', Yellow'

这是重新分配值,因为您根据条件直接将备注的值设置为红色或黄色,而不是串联。您只需使用
+=
作为-

data.loc[data['Rule1']==True,"remark"] += ', Red'
data.loc[data['Rule2']==True,"remark"] += ', Yellow'
(确保
data.reset_index()
incase备注列位于索引中)

PS.BEN_YO的方法是一个有趣的方法,你应该花时间在上面


如果您有您在评论中提到的NAN,那么您可以执行以下操作以完全避免它们

data.loc[(data['Rule1']==True) & (data['remark'].notna()),"remark"] += ', Red'
data.loc[(data['Rule2']==True) & (data['remark'].notna()),"remark"] += ', Yellow'

+=
简化我以前的答案用
+=
简化我以前的答案Akshay,这是简单明了的答案非常感谢!只是一个真正的快速查询,如果你不想回答,这是好的,因为它不在问题中。如果评论中有np.nan怎么办?因为它跳过了np.Nan的值。感谢您的帮助人:)因此,如果有一个Nan,您是否仍要向其追加红色和黄色?是的,即使它是np.Nan,也应根据规则追加该值。我确实用None替换了np.nan,但开始时出现了“,”嗯,我可以避免它们,但我必须想办法在开始时不使用逗号,仍然保留红色和黄色。Akshay,这是简单明了的回答,非常感谢!只是一个真正的快速查询,如果你不想回答,这是好的,因为它不在问题中。如果评论中有np.nan怎么办?因为它跳过了np.Nan的值。感谢您的帮助人:)因此,如果有一个Nan,您是否仍要向其追加红色和黄色?是的,即使它是np.Nan,也应根据规则追加该值。我确实用None替换了np.nan,但是开始时出现了“,”嗯,我可以避免它们,但我必须弄清楚如何在开始时不带逗号地保留红色和黄色。