如何将多个列结构不同的DataFrame合并并对相同列数值求和
合并多结构差异DataFrame实现方案
核心实现逻辑
Pandas原生的DataFrame.add()方法天然支持按索引+列名对齐后相加,指定fill_value=0即可满足你的需求:单侧不存在的行/列对应值会用0填充,相加后等于保留原值,两侧都存在的则直接求和。
示例代码
导入依赖&构造测试数据
import pandas as pd # 构造df1 df1 = pd.DataFrame( data={ "Number of police stations": [2, 1, 3], "Amount of crime": [2, 5, 5], "Average Age": [35, 45, 56] }, index=pd.Index(["B", "A", "C"], name="Region Code") ) # 构造df2 df2 = pd.DataFrame( data={ "Number of police stations": [5, 3], "Amount of crime": [2, 5] }, index=pd.Index(["B", "A"], name="Region Code") )
执行合并
# 核心代码,多个df可循环累加 result = df1.add(df2, fill_value=0).astype(int)
输出结果验证
| Region Code | Number of police stations | Amount of crime | Average Age |
|---|---|---|---|
| B | 7 | 4 | 35 |
| A | 4 | 10 | 45 |
| C | 3 | 5 | 56 |
完全符合给定的期望输出。
多df批量合并方案
如果需要合并3个及以上的df,直接循环累加即可:
df_list = [df1, df2, df3, df4] # 替换为你自己的df列表 result = df_list[0].copy() for df in df_list[1:]: result = result.add(df, fill_value=0) result = result.astype(int)
可选结构优化方案
如果需要保留原始数据来源、后续可追溯各df的贡献值,可以改用长表存储+分组求和的方案:
- 把所有df转成长格式(
melt方法),新增字段标记数据来源 - 合并所有长表后按
Region Code、列名字段分组求和 - 需要宽表输出时再用
pivot转回即可
内容的提问来源于stack exchange,提问作者chrisC
相关产品推荐
相关产品推荐

