You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python DataFrame多字段选取与绘图问题求助

Python 绘图解决方案(基于指定教育数据集)

任务1:Sector A的Enrolment与Accommodation趋势折线图

你的原代码核心问题是逻辑判断错误:用&同时要求同一行的指标既是Enrolment又是Accommodation,这根本不可能,所以筛选出来的是空数据集,自然画不出图。另外硬编码行号(iloc[[0,1]])很不稳定,换个数据顺序就失效了。

修正后的代码:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据(如果已导入可跳过这行)
school_data = pd.read_excel("df_data.xlsx")

# 正确筛选Sector A下的两个指标
filtered = school_data[
    (school_data['Sector'] == 'A') &
    school_data['Classes / Accommodation / Enrolment / Repeaters '].isin(['Enrolment', 'Accommodation'])
]

# 提取年份列(假设第2到第6列是2011-2015年,可根据实际列名调整)
year_cols = filtered.columns[2:7]
# 转置数据,让年份成为X轴,指标作为折线
plot_data = filtered.set_index('Classes / Accommodation / Enrolment / Repeaters ')[year_cols].T

# 绘图
plot_data.plot(kind='line', marker='o', figsize=(10,6))
plt.title('Sector A: Enrolment vs Accommodation (2011-2015)')
plt.xlabel('Year')
plt.ylabel('Number')
plt.legend(title='Metric')
plt.grid(True)
plt.show()

这样处理后,数据结构完全匹配预期的折线图效果:年份在X轴,两条线分别对应Enrolment和Accommodation的趋势。


任务2:Sector A/B的Enrolment 2013-2015年柱状图

原代码用iloc硬编码行号太不靠谱,而且没指定柱状图类型,数据结构也不对。直接按条件筛选后转置就能得到预期的分组柱状图:

# 筛选Enrolment指标、Sector A/B、2013-2015年数据
bar_data = school_data[
    (school_data['Classes / Accommodation / Enrolment / Repeaters '] == 'Enrolment') &
    school_data['Sector'].isin(['A', 'B'])
][['Sector', '2013', '2014', '2015']]

# 转置后让年份作为分组,Sector作为X轴类别
bar_plot_data = bar_data.set_index('Sector').T

# 绘制分组柱状图
bar_plot_data.plot(kind='bar', figsize=(8,5), rot=0)
plt.title('Enrolment by Sector (2013-2015)')
plt.xlabel('Year')
plt.ylabel('Enrolment Count')
plt.legend(title='Sector')
plt.grid(axis='y')
plt.show()

这段代码会生成按年份分组、每个年份下对比A/B两个Sector的柱状图,完全符合预期效果。


内容的提问来源于stack exchange,提问作者digital_c

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:21:53