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
相关产品推荐
相关产品推荐

