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

如何用Pandas提取球员每年效力的最高级别联赛数据?

问题解决:获取球员每年最高级别联赛记录

错误原因

原代码存在两个关键问题:

  1. 取数逻辑完全搞反:按Lev降序(最高级别在前)排序后,用groupby(...).tail(1)取的是每组最后一行,也就是该年份的最低级别记录,和需求完全相反。
  2. 依赖字符串默认排序不可靠:直接对Lev字符串排序,虽然部分场景结果看似正常,但无法严格遵循你自定义的级别顺序,后续遇到特殊命名的级别必然出问题。

修正代码

import pandas as pd

prospect = pd.read_html('https://www.baseball-reference.com/register/player.fcgi?id=bishop000hun')[0]

levels = ['Rk', 'A-', 'A', 'A+', 'AA', 'AAA', 'MLB']

# 筛选属于指定级别的行
prospect = prospect[['Year', 'Tm', 'Lg', 'Lev', 'PA']][prospect['Lev'].isin(levels)]

# 将Lev转换为有序分类,严格遵循自定义的级别顺序(从低到高)
prospect['Lev'] = pd.Categorical(prospect['Lev'], categories=levels, ordered=True)

# 先按年份升序,再按级别降序排序,确保同一年份最高级别排在最前
# 分组后取每组第一行,即为该年份的最高级别记录
prospect = prospect.sort_values(['Year', 'Lev'], ascending=[True, False]).groupby('Year').head(1)

代码说明

  • 有序分类转换:用pd.Categorical指定Lev的分类顺序,让排序完全按照你定义的联赛级别高低来,彻底避免字符串排序的不确定性。
  • 正确取数逻辑:排序后同一年份的最高级别记录排在组内第一行,用head(1)直接提取即可得到目标数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:35:13