You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于指定条件,用同结构第二个DataFrame修复第一个DataFrame数值

Pandas: Replace df1 values with df2 values where df2 is not -1

嘿,这个需求处理起来超简单,用Pandas的内置方法就能轻松搞定!先把你的示例数据贴出来方便大家理解:

import pandas as pd

df1 = pd.DataFrame({'a' : [1,2,3], 'b' : [11,22,33], 'c' : [111,222,333]})
df2 = pd.DataFrame({'a' : [0,-1,-1], 'b' : [-1,-1,-1], 'c' : [1,2,-1]})

你的核心需求是:当df2中对应位置的数值不等于-1时,用df2的值替换df1的对应值;如果df2的值是-1,就保留df1原来的数值。

这里有两个非常直观的向量化方法可以实现,完全不用写循环:

方法1:使用df.where()

where()的逻辑很直白:当指定条件成立时,保留原DataFrame的值;条件不成立时,用另一个DataFrame的值替换。刚好匹配我们的需求:

result = df1.where(df2 == -1, df2)
print(result)

方法2:使用df.mask()

mask()和where()是反向逻辑:当条件成立时,用另一个DataFrame的值替换原数据;条件不成立时保留原值。所以我们可以这样写:

result = df1.mask(df2 != -1, df2)
print(result)

两种方法运行后都会得到你想要的结果:

a   b    c
0  0  11    1
1  2  22    2
2  3  33  333

简单唠唠逻辑:

  • 方法1里,df2 == -1会生成一个布尔矩阵,当df2的值是-1时为True,此时保留df1的数值;否则用df2的数值替换。
  • 方法2里,df2 != -1是我们要触发替换的条件,当这个条件为True时,就用df2的值替换df1的对应位置。

这两种方法都是Pandas的原生向量化操作,效率拉满,处理大规模数据也完全没问题~

内容的提问来源于stack exchange,提问作者Roman Kazmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 00:17:42