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

