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

如何对任意数量的pandas DataFrame按行列匹配逐元素相加?

实现多个Pandas DataFrame按行列匹配逐元素相加(缺失值视为0)

方法1:使用pd.concat + groupby求和

这种方法逻辑直观,适合任意数量的DataFrame:先将所有DataFrame按行索引堆叠,再按行列索引分组求和,缺失的行列会自动以0参与计算(sum()默认跳过NaN,等价于视为0)。

代码示例:

import pandas as pd

dat1 = pd.DataFrame({'A' : [1999, -11234], 'B' : [88888, -345], 'C' : [-7777, -8978], 'D' : [7777, -8978]})
dat2 = pd.DataFrame({'A' : [999, 1234], 'B' : [8888, -345], 'C' : [-7777, -8978]})
Collection = [dat1, dat2]

# 合并所有DataFrame并按行索引分组求和
result = pd.concat(Collection).groupby(level=0).sum()
print(result)

输出结果:

A      B      C      D
0    2998  97776 -15554   7777
1  -10000   -690 -17956  -8978

方法2:使用functools.reduce + DataFrame.add

通过reduce迭代调用add方法,设置fill_value=0让缺失的行列自动填充0后再相加,效率更高,适合大规模数据场景。

代码示例:

import pandas as pd
from functools import reduce

dat1 = pd.DataFrame({'A' : [1999, -11234], 'B' : [88888, -345], 'C' : [-7777, -8978], 'D' : [7777, -8978]})
dat2 = pd.DataFrame({'A' : [999, 1234], 'B' : [8888, -345], 'C' : [-7777, -8978]})
Collection = [dat1, dat2]

# 迭代相加,缺失值填充0
result = reduce(lambda x, y: x.add(y, fill_value=0), Collection)
print(result)

输出与方法1完全一致。

方法说明

  • 方法1核心:concat堆叠所有DataFrame,groupby(level=0)保留原行索引,sum()自动忽略NaN(等价于视为0);
  • 方法2核心:reduce依次将列表中DataFrame两两相加,add(fill_value=0)确保缺失的行/列用0补充,避免出现NaN;
  • 两种方法均支持任意数量的DataFrame,无论行/列是否完全匹配。

内容的提问来源于stack exchange,提问作者Brian Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:46:12