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,但是开始时出现了“,”嗯,我可以避免它们,但我必须弄清楚如何在开始时不带逗号地保留红色和黄色。