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

