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

Pandas中如何用另一DataFrame的匹配值替换当前表的0值

Pandas 双DataFrame条件替换0值实现方法

核心逻辑是通过公共关联键把参考平均值关联到主表,再做向量化条件替换,全程不需要逐行遍历,执行效率高。

具体实现步骤

  • 先重命名参考表的统计列,避免合并时字段名冲突
# 给df2的平均值字段加专属后缀,和df1的原始业务字段做区分
df2_ref = df2.rename(columns={"Quantity": "Quantity_mean", "Price": "Price_mean"})
  • 按匹配规则把平均值关联到df1
    用Region和Product作为联合关联键,用左连接保证df1的原始行数、顺序完全不变,每一行自动匹配到同区域同产品的平均值:
df_combined = df1.merge(df2_ref, on=["Region", "Product"], how="left")
  • 执行条件替换
    只把取值为0的Quantity、Price替换成对应平均值,非0值保留原始数据:
import numpy as np

# 替换数量字段的0值
df_combined["Quantity"] = np.where(
    df_combined["Quantity"] == 0,
    df_combined["Quantity_mean"],
    df_combined["Quantity"]
)

# 替换价格字段的0值
df_combined["Price"] = np.where(
    df_combined["Price"] == 0,
    df_combined["Price_mean"],
    df_combined["Price"]
)
  • 清理临时冗余字段,得到最终结果
df1_final = df_combined.drop(columns=["Quantity_mean", "Price_mean"])

注意事项

  • 提前确认df2中每个Region+Product组合是唯一的,不存在重复统计行,否则合并时会出现主表行数膨胀的问题
  • 如果你的数据里0值是缺失值填充来的,可以把判断条件改成同时兼容空值:df_combined["Quantity"].isna() | (df_combined["Quantity"] == 0),空值也会一并替换成平均值
  • 你提到的南非地区XYZ产品0值替换的场景,因为南非属于非洲区域,合并时会自动匹配到df2中非洲区域XYZ产品的平均值,完全符合替换规则

内容的提问来源于stack exchange,提问作者A.N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:54:38