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

Pandas如何合并聚合两个DataFrame并实现对应列值相减

Pandas 按PLU匹配计算采购与销售差值的实现方案

你已经完成两个表按PLU聚合去重、QTY求和的预处理后,直接用以下两种方法即可实现差值计算,两种方法都经过示例数据验证。

方法1:表合并后直接计算(逻辑直观,适合新手)

通过merge按PLU字段匹配两个表的记录,区分采购量和销售量列后直接做减法即可,逻辑和Excel的VLOOKUP匹配计算一致,容易排查问题。

# 前置预聚合代码(你已经实现过的去重求和步骤)
# final_purch_agg = final_purch.groupby("PLU", as_index=False)["QTY"].sum()
# pmix_diff_agg = pmix_diff.groupby("PLU", as_index=False)["QTY"].sum()

# 按PLU匹配合并
merge_df = final_purch_agg.merge(
    pmix_diff_agg,
    on="PLU",
    how="inner", # 仅保留两个表都存在的PLU;要保留仅入库无销售的PLU就改为"left"
    suffixes=("_in", "_out") # 给两个表的QTY列加后缀区分
)

# 计算剩余库存
merge_df["stock_left"] = merge_df["QTY_in"] - merge_df["QTY_out"]

基于你给出的示例数据,运行后得到的结果如下:

PLUQTY_inQTY_outstock_left
123456781293
90123456734
78901234211

方法2:索引对齐运算(代码简洁,性能更好)

Pandas的Series对象会自动按索引值匹配做运算,你可以把PLU设为索引后直接对QTY列做减法,代码更短,处理大数据量时速度更快。

# 前置预聚合代码同上
# final_purch_agg = final_purch.groupby("PLU", as_index=False)["QTY"].sum()
# pmix_diff_agg = pmix_diff.groupby("PLU", as_index=False)["QTY"].sum()

# 设PLU为索引后直接做减法,自动按PLU匹配
stock_result = (
    final_purch_agg.set_index("PLU")["QTY"]
    .sub(pmix_diff_agg.set_index("PLU")["QTY"], fill_value=0) # fill_value=0代表缺项时默认值为0,避免出现空值
    .reset_index(name="stock_left")
)

注意:如果存在PLU仅在其中一个表出现的场景,fill_value=0会自动把缺失的对应值按0处理:比如某PLU只有入库记录没有销售记录,销售量默认按0算,剩余库存等于入库量;如果只有销售记录没有入库记录,入库量默认按0算,剩余库存为负数。

内容的提问来源于stack exchange,提问作者Kyle XCVI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:00:59