Python如何实现DataFrame分组值计数并写入Excel独立工作表
pandas分组统计+按客户分Sheet导出实现方案
你现有的分组导出框架逻辑正确,只需要在每个分组写入前补充值计数、拼接统计结果的步骤即可,完整可运行代码如下:
import pandas as pd # 请确认原始DataFrame变量名、列名和你的实际代码一致 with pd.ExcelWriter("Test.xlsx", engine="openpyxl") as writer: for client, group_data in summary2.groupby('Client'): # 统计Result、Result2列中两类值的出现次数 count_expired = group_data[['Result', 'Result2']].apply(lambda col: (col == "Expired").sum()) count_not_expire = group_data[['Result', 'Result2']].apply(lambda col: (col == "Not Expire").sum()) # 构造统计结果表,和原表列结构对齐方便拼接 stat_df = pd.DataFrame( [count_expired, count_not_expire], index=["Expired计数", "Not Expire计数"] ).reset_index(names="统计项") # 原始明细 + 空行分隔 + 统计结果拼接 empty_sep = pd.DataFrame([[None]*len(group_data.columns)], columns=group_data.columns) output_sheet_data = pd.concat([group_data, empty_sep, stat_df], ignore_index=True) # 处理Excel工作表名非法规则,避免导出报错 valid_sheet_name = str(client)[:31]\ .replace('/','_').replace('\\','_').replace('*','_')\ .replace('?','_').replace(':','_').replace('[','_').replace(']','_') # 写入对应客户工作表 output_sheet_data.to_excel(writer, sheet_name=valid_sheet_name, index=False)
注意事项
- 代码中
Client、Result、Result2列名,以及匹配的字符串Expired、Not Expire需要和你实际数据集的拼写、大小写完全匹配,你原有代码分组用的是小写client,按实际字段名调整即可。 - 如果运行提示缺少openpyxl依赖,先执行
pip install openpyxl安装即可,这是pandas导出xlsx格式文件的标准依赖。 - 统计逻辑仅计数你指定的两类值,空值、其他异常值不会被计入统计行,符合需求。
- 原始明细和统计结果中间默认加了一行空行做视觉分隔,不需要的话直接删掉
empty_sep相关的拼接代码即可。 - 默认导出时不保留pandas自动生成的行索引,如果需要保留索引,删掉
to_excel方法里的index=False参数即可。 - 代码自动处理了Excel工作表名的规则限制:工作表名最长31字符,不能包含
\ / * ? : [ ]特殊字符,会自动替换为下划线避免导出报错。
内容的提问来源于stack exchange,提问作者brandooo23
相关产品推荐
相关产品推荐

