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

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的取值,无需手动指定

关键改动说明:

  1. 分组逻辑调整为groupby(['continent', 'year']),确保每个大洲的两个年份分别独立计算均值
  2. 增加['lifeExp']限定计算列,彻底避免对year列进行均值计算
  3. 仅调用一次unstack('year'),将年份从索引转为列,最终数据结构为「每行一个大洲,每列对应年份的预期寿命均值」,完美匹配柱状图的展示需求
  4. 移除手动指定图例的代码,因为unstack后列名就是1952和2007,绘图时会自动生成正确图例

调整后,图表中的两根柱子都会正确展示对应年份的预期寿命均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:30:55