如何按多级索引唯一值拆分Pandas汇总表生成图表或个性化表格
Pandas多级索引按员工拆分统计结果实现方案
你当前的多级索引表结构完全可以直接拆分,不需要额外做复杂的格式转换,两种需求的实现代码如下:
前置校验
先确认你的汇总表索引层级符合预期:一级索引是Primary staff(员工姓名),二级索引是文档状态,列是A-E五类文档名,运行下面代码可以校验:
# 打印索引层级名称 print(your_summary_df.index.names)
如果输出的层级顺序不对,可以用df.swaplevel()调整两个索引的顺序,保证员工在一级索引位置即可。
批量生成每位员工的分组柱状图
直接遍历一级索引的唯一值提取单人员工数据,调用pandas内置绘图接口即可生成带完整元素的分组柱状图:
import matplotlib.pyplot as plt import pandas as pd # 绘图基础配置,解决中文显示/标签重叠问题 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 固定状态排序,保证所有图表的图例/柱子顺序一致 status_sort_list = ['Up to Date', 'Expiring Soon', 'Expired'] plot_df = your_summary_df.reindex(status_sort_list, level=1) # 遍历所有员工生成图表 for staff_name in plot_df.index.get_level_values(0).unique(): # 提取当前员工的统计数据 single_staff_data = plot_df.loc[staff_name] # 绘制分组柱状图 ax = single_staff_data.plot( kind='bar', figsize=(9, 5), width=0.8, edgecolor='white' ) # 配置图表必要元素 ax.set_title(f'{staff_name} 负责文档状态统计', fontsize=13) ax.set_xlabel('文档分类', fontsize=10) ax.set_ylabel('文档数量', fontsize=10) ax.legend(title='文档状态', bbox_to_anchor=(1.02, 1), loc='upper left') plt.xticks(rotation=0) plt.tight_layout() # 保存图片到本地,不需要保存可以注释这行 plt.savefig(f'{staff_name}_文档统计.png', dpi=150, bbox_inches='tight') plt.show()
生成的单张图表中,X轴为A-E五个文档分类,每个分类下三个柱子分别对应三种状态,自带Y轴刻度、图例、标题,和预期效果一致。
拆分数据到独立Excel工作表
如果需要导出为每个员工单独一个工作表的Excel文件,用pd.ExcelWriter批量写入即可:
with pd.ExcelWriter('员工文档状态统计汇总.xlsx') as writer: for staff_name in plot_df.index.get_level_values(0).unique(): single_staff_data = plot_df.loc[staff_name].reset_index(names='文档状态') # 写入对应名称的工作表,关闭索引写入让表格更整洁 single_staff_data.to_excel(writer, sheet_name=staff_name, index=False)
运行完成后会在当前代码运行目录生成对应Excel文件,每个工作表以员工姓名命名,存储该员工的全部统计数据。
内容的提问来源于stack exchange,提问作者brandooo23
相关产品推荐
相关产品推荐

