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

Pandas入门者求助:GroupBy后薪资均值最值计算及KeyError问题

问题排查与解决方法

核心原因

你遇到的KeyError是因为分组后的Series转CSV再转回DataFrame时,列名或索引的格式发生了变化,导致你指定的job_title和salary_in_usd列不存在。

分步排查与修复

1. 先确认当前DataFrame的列名

执行以下代码,查看df_two实际的列名:

print(df_two.columns)

通常会出现两种情况:

  • 列名是['Unnamed: 0', 'salary_in_usd']:说明分组后的Series索引(即job_title)被存成了无列名的第一列
  • 只有salary_in_usd一列:说明保存CSV时没把索引写入,丢失了job_title数据

2. 修复CSV中转的格式问题

如果一定要用CSV中转,调整保存和读取的代码:

# 分组计算均值(假设原始数据为df)
salary_mean = df.groupby('job_title')['salary_in_usd'].mean()

# 保存CSV时,指定索引列的名称为job_title
salary_mean.to_csv('mean_salary.csv', index_label='job_title')

# 读取CSV,此时列名就是job_title和salary_in_usd
df_two = pd.read_csv('mean_salary.csv')

# 现在可以正常取列
test = df_two.loc[:, ['job_title', 'salary_in_usd']]

3. 更高效的方案(无需CSV中转)

其实完全不用绕CSV,直接把分组后的Series转为DataFrame即可,避免格式问题:

# 分组计算均值并直接转为DataFrame
df_two = df.groupby('job_title')['salary_in_usd'].mean().reset_index(name='salary_in_usd')

# 正常取列
test = df_two.loc[:, ['job_title', 'salary_in_usd']]

# 直接找薪资均值的最高/最低值及对应职位
max_mean_row = df_two.loc[df_two['salary_in_usd'].idxmax()]
min_mean_row = df_two.loc[df_two['salary_in_usd'].idxmin()]

print(f"最高薪资均值职位:{max_mean_row['job_title']},薪资:{max_mean_row['salary_in_usd']}")
print(f"最低薪资均值职位:{min_mean_row['job_title']},薪资:{min_mean_row['salary_in_usd']}")

补充说明

分组后得到的Series结构是:索引为job_title,值为薪资均值,列名为salary_in_usd。直接用reset_index()可以把索引转为普通列,同时给均值列指定明确名称,这是最稳妥的方式。

内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:35:46