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
相关产品推荐
相关产品推荐

