You need to enable JavaScript to run this app. 如何对多个列数一致、行数不同的动态DataFrame逐单元格叠加求和?
优惠活动
大模型
产品
解决方案
定价
更多

如何对多个列数一致、行数不同的动态DataFrame逐单元格叠加求和?

实现方案

所有动态生成的待求和DataFrame统一存入列表dfs,无需单独定义每个变量,完全适配动态场景。

前置依赖

import pandas as pd
import numpy as np

完整代码逻辑

# 自动计算所有输入表的最大行数,列数全表一致无需额外处理
max_rows = max(df.shape[0] for df in dfs)
col_count = dfs[0].shape[1]

# 初始化全零累加容器
total_arr = np.zeros((max_rows, col_count), dtype=np.float64)

# 逐表累加
for df in dfs:
    # 空值填充为0,避免NaN污染求和结果
    current_arr = df.fillna(0).values
    curr_rows, curr_cols = current_arr.shape
    # 仅累加当前表存在的区域,自动对齐物理位置
    total_arr[:curr_rows, :curr_cols] += current_arr

# 转换为最终DataFrame,列名沿用第一个输入表的列名
result = pd.DataFrame(total_arr, columns=dfs[0].columns)

逻辑说明

  • 完全按物理位置逐单元格累加,和你提到的Result[1,1] = Table1[1,1] + Table2[1,1]对齐逻辑一致,不受原有行、列标签影响。
  • 自动匹配最大尺寸,结果行数为所有输入表的最大行数,列数与输入表完全一致。
  • 空值自动按0处理,仅累加对应位置存在的有效数据。
  • 无硬编码内容,仅需将所有动态生成的表放入dfs列表即可直接复用。
    如果不需要保留原列名,仅按位置生成结果,可将最后一行简化为result = pd.DataFrame(total_arr)。

备选pandas原生实现

如果希望纯用pandas API完成逻辑,可使用functools.reduce迭代求和,结果与上述方案完全一致:

from functools import reduce

# 重置所有表的索引为位置索引,避免原有行标签干扰对齐逻辑
reset_dfs = [df.reset_index(drop=True) for df in dfs]
# 逐表累加,缺失单元格自动填0
result = reduce(lambda left, right: left.add(right, fill_value=0), reset_dfs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 20:06:03