如何对任意数量DataFrame的指定列执行无循环求和并赋值
实现方案
方法1:pd.concat+分组求和(推荐,效率更高)
仅依赖pandas原生接口实现,适合处理大量DataFrame的场景,内存开销更低:
import pandas as pd sum_cols = ['a', 'b', 'c'] final_df[sum_cols] = pd.concat([df[sum_cols] for df in dfs], axis=0).groupby(level=0).sum()
逻辑说明:把所有DataFrame的目标列上下堆叠后,按照相同索引分组求和,得到每个索引位置对应列的累加结果。
方法2:reduce累加(逻辑更直观)
和原有加法逻辑完全对齐,适合DataFrame数量较少的场景:
from functools import reduce import operator sum_cols = ['a', 'b', 'c'] final_df[sum_cols] = reduce(operator.add, (df[sum_cols] for df in dfs))
逻辑说明:通过reduce迭代调用加法操作,把列表中所有DataFrame的目标列依次累加,得到最终结果。
注意事项
- 两种方案都要求列表内所有DataFrame的索引完全一致,且都包含
sum_cols指定的列 - 均无显式for循环,迭代逻辑由Python/pandas内置接口封装,执行效率高于手写for循环
内容的提问来源于stack exchange,提问作者abisko
相关产品推荐
相关产品推荐

