合并两个含同名列的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
相关产品推荐
相关产品推荐

