如何按DataFrame指定列分组并写入同一Excel的不同工作表
解决按分组写入Excel多工作表的问题
你已经找对了分组的方向,但目前的代码存在两个核心问题:一是反复写入同一个CSV文件会覆盖之前的数据,二没实现写入Excel不同工作表的目标。咱们调整下代码,用pandas的ExcelWriter就能轻松搞定需求:
完整解决方案代码
import pandas as pd # 构建示例数据(替换成你实际的DataFrame z3即可) data = { 'cats': ['[0.9, 1.0)', '[0.1, 0.2)', '[0.1, 0.2)', '[0.0, 0.1)', '[0.3, 0.4)', '[0.9, 1.0)'], 'predict': ['99%', '30%', '51%', '0%', '12%', '100%'] } z3 = pd.DataFrame(data) # 创建ExcelWriter对象,指定输出文件路径 with pd.ExcelWriter('grouped_data.xlsx', engine='openpyxl') as writer: # 按cats列分组,遍历每个分组的名称和对应数据 for group_name, group_data in z3.groupby('cats'): # 将当前分组写入同名工作表,关闭索引输出让表格更整洁 group_data.to_excel(writer, sheet_name=group_name, index=False, encoding='gbk')
关键细节说明
- 用
groupby('cats')直接分组,比手动筛选更高效,还能避免重复处理相同分组的问题 ExcelWriter是pandas专门处理多工作表写入的工具,with语句会自动帮你关闭文件,不用手动处理资源释放sheet_name=group_name直接把分组名称作为工作表名,完全匹配你的需求
对比你原有代码的改进点
你之前的代码:
for groups in z3.cats: group=z3[z3['cats']==groups] group.to_csv('group.csv',encoding='gbk')
- 问题1:遍历
z3.cats会重复处理相同分组(比如示例里[0.1, 0.2)出现两次,代码会执行两次写入,覆盖之前内容) - 问题2:始终写入同一个
group.csv,最终只会保留最后一个分组的数据 - 问题3:目标是Excel多工作表,但代码输出的是CSV文件
用新代码就能完美解决这些问题,每个分组都会精准写入对应名称的Excel工作表中。
内容的提问来源于stack exchange,提问作者peteryoung
相关产品推荐
相关产品推荐

