Pandas DataFrame指定列均值计算问题:误算年份均值而非预期寿命
问题解决:正确计算预期寿命(lifeExp)列的均值
问题出在两个核心点:
groupby('continent')后直接调用mean(),会对所有数值列(包括year和lifeExp)计算均值,导致结果混入了年份的均值数据- 多次调用
unstack()完全冗余,反而打乱了数据结构,让绘图时错误展示了年份均值
修正后的代码如下:
# 筛选目标年份,按大洲+年份分组,仅计算lifeExp的均值 df_life_exp = (df .loc[df['year'].isin([1952, 2007]), ['year', 'continent', 'lifeExp']] .groupby(['continent', 'year'])['lifeExp'] # 明确指定计算列 .mean() .unstack('year') # 仅unstack一次,将年份转为列,适配柱状图结构 ) ax = df_life_exp.plot.bar(rot=45, figsize=(16, 6)) ax.set_xlabel('Continent', fontsize=12) ax.set_ylabel('Life Expectancy', fontsize=12) ax.set_title('Life Expectancy by continent in 1952 and 2007', fontsize=14) # 此时图例会自动沿用year的取值,无需手动指定
关键改动说明:
- 分组逻辑调整为
groupby(['continent', 'year']),确保每个大洲的两个年份分别独立计算均值 - 增加
['lifeExp']限定计算列,彻底避免对year列进行均值计算 - 仅调用一次
unstack('year'),将年份从索引转为列,最终数据结构为「每行一个大洲,每列对应年份的预期寿命均值」,完美匹配柱状图的展示需求 - 移除手动指定图例的代码,因为
unstack后列名就是1952和2007,绘图时会自动生成正确图例
调整后,图表中的两根柱子都会正确展示对应年份的预期寿命均值。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

