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的结果就是你要的预期输出:
| A | B | C | sum |
|---|---|---|---|
| X | P | M | 30 |
| X | Q | N | 15 |
| Y | P | M | 30 |
| Z | R | S | 0 |
这里最后一行Z/R/S分组因为df2里没有对应数据,sum依然保持0,完全符合你的需求~
内容的提问来源于stack exchange,提问作者BYZZav
相关产品推荐
相关产品推荐

