Python中如何为含重复姓名与赛季的DataFrame添加按球员分组的赛季序号列
实现按球员分组标注赛季序号的方法
你提到的样例数据集处理后参考效果如下:
| Name | Season | Points | Reb | 赛季序号 |
|---|---|---|---|---|
| Lebron James | 2003-04 | 25ppg | 10reb | 1 |
| Lebron James | 2004-05 | 26ppg | 10reb | 2 |
| Lebron James | 2005-06 | 27ppg | 9reb | 3 |
| Michael Jordan | 1984-85 | 29ppg | 9reb | 1 |
| Michael Jordan | 1985-86 | 30ppg | 10reb | 2 |
以下是不同工具下的实现方案:
1. Python Pandas 实现
思路是按球员姓名分组后,对赛季列按时间升序排列,再生成组内自增序号:
import pandas as pd # 读取数据集,这里以csv为例,可根据你的存储格式调整 df = pd.read_csv("你的数据集路径.csv") # 去除列名和值的多余空格(适配样例中存在的格式问题) df.columns = df.columns.str.strip() df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x) # 按球员分组,对赛季升序排列后生成组内序号,从1开始计数 df = df.sort_values(by=["Name", "Season"], ascending=[True, True]) df["赛季序号"] = df.groupby("Name").cumcount() + 1 # 输出结果 print(df)
2. SQL 实现
用窗口函数ROW_NUMBER()即可实现分组排序编号,假设你的表名为nba_player_season:
SELECT *, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Season ASC) AS 赛季序号 FROM nba_player_season
如果你的数据库存储的赛季格式不是可直接排序的字符串,可先转换为年份数值再排序
3. Excel 实现
假设你的数据从第2行开始,A列是球员姓名,B列是赛季,要在E列生成赛季序号,在E2单元格输入以下公式,下拉填充即可:
=COUNTIFS(A$2:A2, A2, B$2:B2, "<="&B2)
内容的提问来源于stack exchange,提问作者Hman
相关产品推荐
相关产品推荐

