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

如何将多个列结构不同的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 CodeNumber of police stationsAmount of crimeAverage Age
B7435
A41045
C3556

完全符合给定的期望输出。

多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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:18:03