Pandas分组统计后调用.plot.bar()无法生成堆叠柱状图,如何实现?
如何生成堆叠柱状图?
我懂你的问题——你已经通过分组查询拿到了正确的统计数据,但直接调用.plot.bar()出来的是分散的单条柱子,不是想要的堆叠效果。别担心,只需要调整一下数据结构就能解决。
首先,你当前的分组结果是一个多级索引的Series,每个(department, status)组合都是独立的条目,直接绘图自然是分开的柱子。要做堆叠柱状图,我们需要把status从索引转成列,让每个部门对应一行,不同状态的数值并列成列——这一步用unstack()就能实现。
具体步骤:
- 先处理分组结果,将状态列展开:
# 获取分组统计结果并将status转为列 counts_df = df.groupby(['department', 'status'])['c_name'].count().unstack() # 填充可能存在的空值(比如有的部门没有某个状态的数据) counts_df = counts_df.fillna(0)
- 然后绘制堆叠柱状图:
counts_df.plot.bar(stacked=True)
为什么这样做?
unstack之后,你的数据结构会变成类似下面的格式(以你的统计结果为例):
department Accepted Pending Rejected Agriculture 3 2.0 13 Department of Education and Training 290 0.0 65 Higher Education 424 24.0 92 Medical Education and Research 34 3.0 1
这样每个部门作为x轴的一个类别,不同状态的数值就可以在同一个柱子里堆叠起来了。运行上面的代码,就能得到你想要的堆叠柱状图啦!
内容的提问来源于stack exchange,提问作者shantanuo




