如何根据Pandas DataFrame其他列的值更新指定行的目标列元素
Pandas按条件更新指定行字段的最优方案
问题原因
你之前的写法是给整个price Now列赋值单个标量值,因此会触发全列统一填充,导致所有行的取值一致。
最优实现方法
Pandas官方推荐使用loc索引器实现按条件更新,不会触发链式索引警告,执行效率和安全性都是最优的。
针对你的需求的代码示例
# 仅筛选Company列为ASSA-B.ST的行,更新其price Now字段为200 p1.loc[p1["Company"] == "ASSA-B.ST", "price Now"] = 200
语法说明
loc的第一个参数是行筛选条件:传入布尔序列,只有返回True的行会被选中loc的第二个参数是要更新的列名,可以传入单个列名字符串,也可以传入列表同时修改多列- 等号右侧的新值如果是标量,所有匹配行都会被赋值为该值;如果是和匹配行数长度一致的序列,会逐行对应赋值
注意事项
如果需要多条件组合筛选,每个独立条件需要用括号包裹,用&(逻辑与)、|(逻辑或)连接,示例:
# 同时满足Company为ASSA-B.ST、Value大于950的行才会被更新 p1.loc[(p1["Company"] == "ASSA-B.ST") & (p1["Value"] > 950), "price Now"] = 200
不要使用p1[p1["Company"] == "ASSA-B.ST"]["price Now"] = 200这类链式索引写法,大概率会触发SettingWithCopyWarning警告,且修改可能不会实际生效。
内容的提问来源于stack exchange,提问作者Kire
相关产品推荐
相关产品推荐

