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

Python DataFrame多列匹配:基于df2更新分组库存df1的总价列

解决多列匹配汇总更新DataFrame的问题

我来帮你搞定这个需求!核心思路就是先把物品清单表(df2)按A、B、C分组算出每组总价,再和分组库存表(df1)做匹配,更新sum列。下面是具体的实现步骤和代码:

第一步:准备示例数据(你可以替换成自己的数据)

先模拟两个DataFrame方便测试:

import pandas as pd

# 分组库存表df1:sum初始为0
df1 = pd.DataFrame({
    'A': ['X', 'X', 'Y', 'Z'],
    'B': ['P', 'Q', 'P', 'R'],
    'C': ['M', 'N', 'M', 'S'],
    'sum': [0, 0, 0, 0]
})

# 物品清单表df2:包含A、B、C和单价
df2 = pd.DataFrame({
    'A': ['X', 'X', 'X', 'Y'],
    'B': ['P', 'P', 'Q', 'P'],
    'C': ['M', 'M', 'N', 'M'],
    '单价': [10, 20, 15, 30]
})

第二步:计算df2中每组的总价

按A、B、C三个字段分组,对单价求和,得到每组的总价格:

# 分组求和并重命名列,和df1的sum列对应
grouped_total = df2.groupby(['A', 'B', 'C'])['单价'].sum().reset_index()
grouped_total.rename(columns={'单价': 'sum'}, inplace=True)

第三步:匹配更新df1的sum列

用**左连接(left join)**把df1和分组后的总价表合并,这样df1里所有分组都会保留,哪怕df2里没有对应数据的分组,sum会保持0:

# 合并两个表,更新sum列
df1_updated = df1.merge(
    grouped_total,
    on=['A', 'B', 'C'],
    how='left',
    suffixes=('_original', '_updated')
)

# 处理没有匹配到的分组,sum保持为0
df1_updated['sum'] = df1_updated['sum_updated'].fillna(0)

# 清理多余的列(如果不需要原始sum的话)
df1_updated.drop(columns=['sum_original', 'sum_updated'], inplace=True)

最终效果

运行后df1_updated的结果就是你要的预期输出:

ABCsum
XPM30
XQN15
YPM30
ZRS0

这里最后一行Z/R/S分组因为df2里没有对应数据,sum依然保持0,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:39:22