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

Pandas:在大型体育数据集中查询跨/同赛季换赛区的运动员

用Pandas筛选两类更换赛区的运动员数据

我正在处理一份超70万行的体育数据集,每行对应运动员某年度联赛赛季的表现,需要筛选出两类更换赛区的运动员相关记录:

  • 单赛季内更换赛区的记录
  • 存在跨赛季更换赛区(或单赛季更换)的运动员的全部记录

示例数据集

Id  Name       Division    Year
-------------------------------
01 Edgar      D2          2015
01 Edgar      D1          2016
01 Edgar      D1          2017
01 Edgar      D2          2018
02 Charlie    D2          2015
02 Charlie    D2          2016
02 Charlie    D1          2016
02 Charlie    D1          2017
02 Charlie    D1          2018
03 Will       D2          2015
03 Will       D1          2015
03 Will       D1          2016
03 Will       D1          2017
03 Will       D2          2018
04 Frank      D2          2015
04 Frank      D2          2016
04 Frank      D1          2016
04 Frank      D2          2017
04 Frank      D1          2017
04 Frank      D2          2018

预期输出

1. 单赛季内更换赛区的记录

Id  Name       Division    Year
-------------------------------
02 Charlie    D2          2016
02 Charlie    D1          2016
03 Will       D2          2015
03 Will       D1          2015
04 Frank      D2          2016
04 Frank      D1          2016
04 Frank      D2          2017
04 Frank      D1          2017

2. 跨赛季更换赛区的运动员全部记录

Id  Name       Division    Year
-------------------------------
01 Edgar      D2          2015
01 Edgar      D1          2016
01 Edgar      D1          2017
01 Edgar      D2          2018
02 Charlie    D2          2015
02 Charlie    D2          2016
02 Charlie    D1          2016
02 Charlie    D1          2017
02 Charlie    D1          2018
03 Will       D2          2015
03 Will       D1          2015
03 Will       D1          2016
03 Will       D1          2017
03 Will       D2          2018
04 Frank      D2          2015
04 Frank      D2          2016
04 Frank      D1          2016
04 Frank      D2          2017
04 Frank      D1          2017
04 Frank      D2          2018

Pandas实现方案

1. 筛选单赛季内更换赛区的记录

针对大数据集,优先选择高效的分组筛选方式:

import pandas as pd

# 获取所有存在单赛季多赛区的(Id, Year)组合
multi_div_groups = df.groupby(['Id', 'Year'])['Division'].nunique()
multi_div_groups = multi_div_groups[multi_div_groups > 1].index

# 筛选对应记录
single_season_switch = df.set_index(['Id', 'Year']).loc[multi_div_groups].reset_index()

2. 筛选存在换赛区行为的运动员全部记录

这里的换赛区行为包括单赛季更换和跨赛季更换,需先标记所有符合条件的运动员,再提取其全部记录:

import pandas as pd

# 生成单赛季更换掩码
single_mask = df.groupby(['Id', 'Year'])['Division'].transform('nunique') > 1

# 生成跨赛季更换掩码(需先按运动员和年份排序)
df_sorted = df.sort_values(['Id', 'Year'])
cross_mask = df_sorted.groupby('Id')['Division'].transform(lambda x: x != x.shift()).fillna(False)

# 生成运动员级别的掩码:只要有任一更换行为就保留所有行
athlete_mask = df.groupby('Id')['Id'].transform(lambda x: single_mask.loc[x.index].any() or cross_mask.loc[x.index].any())

# 筛选最终结果
cross_season_switch_all = df[athlete_mask]

内容的提问来源于stack exchange,提问作者d-fws

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:34:54