如何修改pandas中经掩码筛选的DataFrame列的值,用另一列数值替换?
问题原因
你遇到的是pandas的链式索引问题:df.loc[mask].events的写法会分为两步执行:
- 先执行
df.loc[mask],生成原DataFrame的临时副本 - 再给这个临时副本的
events列赋值,修改仅作用于临时副本,不会同步到原DataFrame
如果没有开启SettingWithCopyWarning警告,运行过程不会有任何报错提示,很难直接定位问题。
解决方法
将列名放在loc的第二个参数位置,一次性完成筛选和赋值操作,避免生成临时副本:
i = 0 mask = (df.index > df_dates.start[i]) & (df.index < df_dates.end[i]) # 正确赋值写法 df.loc[mask, 'events'] = df.loc[mask, 'l_mean'] # 验证修改结果 df.loc[mask, 'events']
这种写法直接对原DataFrame做修改,赋值后目标列会正常更新。
内容的提问来源于stack exchange,提问作者eetiaro
相关产品推荐
相关产品推荐

