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

Python:如何将多组groupby结果输出至同一Excel工作表?

问题分析与解决

报错原因

你把处理后的多个DataFrame存成了列表df = [avg , c8, c9, c10],而列表对象没有to_excel方法,这就是报错的直接原因。另外代码里还有一处笔误:c10= (df.assign(c10=df['column'].abs())里的column应该是column10,会导致KeyError,需要修正。

修复方案

要把多个分组后的结果合并成一个单一DataFrame,用pd.concat()按索引拼接(所有结果都以column1为索引),之后再调用to_excel写入Excel。

修正后的完整代码

import pandas as pd

# 假设df是你的原始数据集
avg = df.groupby('column1')[['column2' , 'column3', 'column4' ,'column5',  'column6',  'column7' ]].mean()

c8= (df.assign(c8=df['column8'].abs())
       .groupby(['column1'])['c8'].agg([('min' , 'min'), ('max', 'max')])
       .add_prefix('c8'))

c9= (df.assign(c9=df['column9'].abs())
       .groupby(['column1'])['c9'].agg([('min' , 'min'), ('max', 'max')])
       .add_prefix('c9'))

# 修正笔误:df['column']改为df['column10']
c10= (df.assign(c10=df['column10'].abs())
       .groupby(['column1'])['c10'].agg([('min' , 'min'), ('max', 'max')])
       .add_prefix('c10'))

# 合并所有DataFrame
merged_df = pd.concat([avg, c8, c9, c10], axis=1)

# 写入Excel
wb = pd.ExcelWriter('C:filepath.xlsx' , engine='xlsxwriter')
merged_df.to_excel(wb, sheet_name='Results')
wb.save()

额外优化建议

可以把column8、column9、column10的处理逻辑合并,减少重复代码:

import pandas as pd

# 计算前7列的均值
avg = df.groupby('column1')[['column2' , 'column3', 'column4' ,'column5',  'column6',  'column7' ]].mean()

# 批量处理column8-10的绝对值、min和max
def process_col(col):
    return (df.assign(temp=df[col].abs())
              .groupby('column1')['temp']
              .agg([('min', 'min'), ('max', 'max')])
              .add_prefix(col.replace('column', 'c')))

# 合并结果
merged_df = pd.concat([avg] + [process_col(f'column{i}') for i in range(8, 11)], axis=1)

# 写入Excel(用with语句自动管理资源)
with pd.ExcelWriter('C:filepath.xlsx', engine='xlsxwriter') as wb:
    merged_df.to_excel(wb, sheet_name='Results')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:23