首页 > 解决方案 > Groupby for循环按组导出单独的文件

问题描述

我正在尝试按“状态”列对数据框进行分组,对每个组运行计算,然后导出到 Excel,每个文件都为相应的状态组命名。如果我打印组,它们看起来是正确的,但我无法让文件正确显示组数据。目前它创建具有正确文件名的单独文件,但每个文件都有完整的数据集,忽略了组。此处的源数据:https ://docs.google.com/spreadsheets/d/1-wdmIz_-AILcBqzvpwAFGZfXqhq8oDRrYFVVdkjZ10o/edit?usp=sharing


df = pd.read_excel("ranker_test.xlsx", sheet_name='DATA')

grouped = df.groupby('state')

for group in grouped:
    df.to_excel('test files/ranking_{}.xlsx'.format(group[0]), index=False)

^这会创建正确命名的文件,但每个文件都有所有状态。


df = pd.read_excel("ranker_test.xlsx", sheet_name='DATA')

grouped = df.groupby('state')

for group in grouped:
    group.to_frame().to_excel('test files/ranking_{}.xlsx'.format(group[0]), index=False)

^尝试使用 group.to_frame().to_excel 将其转换为数据框会导致此错误:AttributeError: 'tuple' object has no attribute 'to_frame'

如何将组转换为要存储在每个文件中的数据框?

标签: pandasdataframepandas-groupby

解决方案


解压缩分组值时,您似乎错过了一个参数。分组值是具有以下格式(group_index、group_dataframe)的 touples 列表。因此,为了正确迭代它,您应该执行以下操作:

df = pd.read_excel("ranker_test.xlsx", sheet_name='DATA')

grouped = df.groupby('state')

for name, group in grouped:
    group.to_excel('test files/ranking_{}.xlsx'.format(name), index=False)

注意for 循环中的name参数


推荐阅读