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

求助:获取各年龄段薪资最高的NBA球员数据(代码异常)

解决NBA球员年龄段薪资最高记录提取问题

问题根源

你将Player设为DataFrame的索引后,groupby(['Age']).idxmax()返回的是每个年龄组中薪资最高的行的索引值(即球员姓名)。而你只选取了Age和salary两列进行操作,导致结果里的salary列显示的是索引(球员名),而非实际薪资。同时因为Player是索引而非普通列,直接调用会触发“列不明确”的错误。

解决方案

以下是三种实用的解决方法:

方法一:重置索引后提取目标行

先把Player从索引恢复为普通列,再通过idxmax定位每组薪资最高的行:

# 将Player索引转为普通列
sa.df = sa.df.reset_index()

# 定位每个Age组薪资最高的行,提取所需列
result = sa.df.loc[sa.df.groupby('Age')['salary'].idxmax(), ['Age', 'Player', 'salary']]

方法二:直接利用索引匹配(不改动原索引)

如果不想调整原DataFrame的索引结构,可以先获取目标行的索引,再提取对应数据并转换索引为列:

# 获取每个Age组薪资最高的球员索引
top_player_indices = sa.df.groupby('Age')['salary'].idxmax()

# 提取目标行,将索引(Player)转为列
result = sa.df.loc[top_player_indices, ['Age', 'salary']].reset_index()

方法三:用nlargest直观提取

通过分组后调用nlargest直接取每组薪资最高的1行:

# 重置索引后分组取顶薪记录,清理层级索引
result = sa.df.reset_index().groupby('Age').apply(lambda x: x.nlargest(1, 'salary')).reset_index(drop=True)
# 筛选所需列
result = result[['Age', 'Player', 'salary']]

结果说明

以上方法都会返回一个DataFrame,每个年龄段仅保留一行数据,包含Age、Player和对应最高salary。

内容的提问来源于stack exchange,提问作者R.Harg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:11:08