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

按year分组计算薪资均值后赋值新列全为NaN问题求助

问题原因与解决方法

为什么赋值后新列全是NaN?

你直接赋值的核心问题是索引不匹配:

  • df.groupby('year')['salary'].mean()返回的是一个Series,它的索引是year列的唯一值(比如1990、1992),对应的值是该年份的薪资均值。
  • 但原DataFrame的索引是默认的0、1、2这类行号,两者索引完全不对应。Pandas赋值时会严格按索引对齐数据,找不到匹配项的位置就会填充NaN。

解决方法

方法一:使用transform(推荐)

transform会自动将分组计算的结果广播回原DataFrame的每一行,保持索引一致,直接得到对应年份的均值:

df['averageSalaryPerYear'] = df.groupby('year')['salary'].transform('mean')

方法二:使用map映射

先把分组结果转成字典,再通过year列匹配对应均值:

# 先生成年份到均值的映射字典
year_salary_mean = df.groupby('year')['salary'].mean().to_dict()
# 映射到原DataFrame
df['averageSalaryPerYear'] = df['year'].map(year_salary_mean)

两种方法都能让新列正确显示对应年份的薪资均值,不会出现NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:52:16