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

Pandas多同结构DataFrame按名分组求和合并到新表结果错误问题

Pandas多结构相同DataFrame按指定字段分组求和合并实现方案

原有代码错误点

  • 语法错误:df1.groupby(['Name', sort=False)写法不规范,误将sort参数写进了分组键列表中,同时缺少分组键列表的闭合括号,本身无法正常运行。
  • 索引不匹配:groupby.transform('sum')返回的结果长度和原数据框(如df1)的行数完全一致,但你赋值的目标ndf是所有数据框合并后按Name去重的结果,二者行数、索引均不匹配,赋值时会出现大量错值、空值。
  • 场景覆盖不全:如果某个Name仅在部分数据框中出现,原有写法无法给缺失该Name的数据框对应的求和列正确赋值。

正确实现代码

import pandas as pd

# 按顺序存放所有待处理的DataFrame
frames = [df1, df2, df3, df4, df5, df6, df7, df8, df9]
sum_result_list = []

for seq, df in enumerate(frames, start=1):
    # 单DataFrame按Name分组求和,重命名列名
    grouped_sum = df.groupby('Name', sort=False)['I'].sum().round(2).reset_index(name=f'res_df{seq}')
    sum_result_list.append(grouped_sum)

# 合并所有分组求和结果,保留所有出现过的Name
ndf = sum_result_list[0]
for sum_df in sum_result_list[1:]:
    ndf = ndf.merge(sum_df, on='Name', how='outer')

# 可选:如果需要将某数据框不存在的Name对应的求和值设为0,取消注释下行
# ndf = ndf.fillna(0)

代码说明

  • 先对每个独立的DataFrame单独做分组求和,生成仅包含Name和对应求和结果两列的中间表,中间表的行数和对应原DataFrame的唯一Name数量一致
  • 通过外连接合并所有中间表,保证所有出现过的Name都会被保留,求和列和对应的数据框一一对应
  • 最终生成的ndf每行对应一个唯一Name,各列分别为每个原数据框下该Name的I列求和结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:09:03