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

合并两个含同名列的Pandas DataFrame并对同名列求和

合并日期索引DataFrame:同名列求和,非同名列保留

核心高效方案(推荐)

直接用DataFrame.add()方法,自动对齐索引和列名,指定fill_value=0就能实现需求:

import pandas as pd

# 假设已存在df1和df2两个目标DataFrame
result = df1.add(df2, fill_value=0)
  • 逻辑:add()会自动匹配两个DataFrame的索引和列名,同名列对应位置的值直接相加;
  • 对仅在单个DataFrame中存在的列,fill_value=0让缺失的一方以0参与计算,等价于保留原列的所有值。

通用备选方案(适合需中间操作场景)

如果需要在合并后做额外处理,可以先拼接再按列名分组求和:

# 按列拼接两个DataFrame
combined_df = pd.concat([df1, df2], axis=1)
# 按列名分组,对每组求和
result = combined_df.groupby(combined_df.columns, axis=1).sum()
  • 逻辑:concat(axis=1)会把两个DataFrame的列全部拼接,同名列会重复出现;
  • groupby(axis=1).sum()将相同列名的列合并求和,唯一列名的列直接保留原值。

示例验证

用示例数据测试效果:

# 创建示例数据
dates = pd.date_range('2024-01-01', periods=3)
df1 = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6], 'C': [7,8,9]}, index=dates)
df2 = pd.DataFrame({'A': [10,20,30], 'B': [40,50,60], 'D': [70,80,90]}, index=dates)

# 用add方法生成结果
result = df1.add(df2, fill_value=0)
print(result)

输出结果:

A     B    C     D
2024-01-01  11  44.0  7.0  70.0
2024-01-02  22  55.0  8.0  80.0
2024-01-03  33  66.0  9.0  90.0

可见A、B列是两DataFrame对应值的和,C、D列则保留了各自原DataFrame中的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:33:18