pandas - 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'
如何将组转换为要存储在每个文件中的数据框?
解决方案
解压缩分组值时,您似乎错过了一个参数。分组值是具有以下格式(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参数
推荐阅读
- spring-boot - 在集群模式下运行 Hibernate
- flutter - 在 Dart 中使用三重移位 (>>>) 运算符
- kubernetes - Airflow - 从 Kubernetes 中运行的气流访问 REST API
- javascript - 选择选项是选择上一个选择选项不会隐藏/不显示的选项
- android - 使用改造,D/json 制作新闻应用程序:java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY
- java - 使用来自 java aws sdk 的 DynamoDb 增强客户端,如何使用复合 keyConditionExpression 进行查询?
- angular - 如何在 Angular 的编辑表单上显示文件名?
- node.js - Expressjs 应用程序 - HTTPS 显示目录列表而不是站点
- image - 从 URL LookIntoBitcoin 下载 PNG
- linux - 到处搜索,但无法使用 crontab 运行我自己的示例 bash 脚本