如何在Pandas .plot()中按州汇总学校数量,避免重复行绘图
问题:用Pandas绘制按州汇总的学校总数柱状图
我有一个包含美国全部50个州数据的Pandas DataFrame,结构如下:
| 州名 | 学区 | 每个学区的学校数量 |
|---|---|---|
| Alabama | Alabama District 1 | 21 |
| Alabama | Alabama District 2 | 5 |
| Alaska | Alaska District 1 | 3 |
| Alaska | Alaska District 2 | 4 |
我原本想用Pandas绘制学校数量与州的关系图,代码如下:
school_data.plot(kind='bar', x="State Name", xlabel="State", y="Schools Per District", ylabel="Number of Schools", rot=0, width=10, figsize=(15, 5), title="Number of Schools per District vs. US State" );
但生成的图表是每个学区单独的柱状条,而非按州汇总所有学区的学校总数,数据冗余。
解决方案
要实现按州汇总学校总数并绘制柱状图,需先对数据按州分组求和,再绘图:
1. 分组汇总州级学校总数
使用groupby结合sum方法计算每个州的学校总数:
# 按"州名"分组,对"每个学区的学校数量"列求和,重置索引转为普通DataFrame state_total_schools = school_data.groupby('州名')['每个学区的学校数量'].sum().reset_index()
2. 绘制汇总后的柱状图
修改绘图代码,使用汇总后的数据集:
state_total_schools.plot(kind='bar', x="州名", xlabel="美国各州", y="每个学区的学校数量", ylabel="学校总数", rot=45, # 旋转x轴标签避免名称重叠 figsize=(15, 5), title="美国各州学校总数统计" );
额外优化建议
- 移除原代码中
width=10的设置,该值会导致柱状条过宽,若需调整可设为width=0.8这类合理值 - 若想按学校总数排序展示,可在汇总后添加排序代码:
state_total_schools = state_total_schools.sort_values('每个学区的学校数量', ascending=False)
内容的提问来源于stack exchange,提问作者FJJ
相关产品推荐
相关产品推荐

