Pandas:分组后如何基于日期添加比赛场次计数列?
原始数据
你的DataFrame初始结构如下:
| 球队 | 球员 | 日期 | GameID |
|---|---|---|---|
| Bears | John | 2022-10-01 | A1 |
| Bears | Dave | 2022-10-01 | A1 |
| Bears | Steve | 2022-10-01 | A1 |
| Bulls | Connor | 2022-10-01 | C2 |
| Bulls | Jack | 2022-10-01 | C2 |
| Bears | John | 2022-10-03 | A3 |
需求
按球队和日期排序后,添加GameNum列,对每支球队的赛季比赛从1开始连续计数,同一场比赛(相同GameID/日期)的所有球员对应同一个场次编号。
简洁解决方案(无需循环/合并)
方法1:使用factorize() + transform()
import pandas as pd # 假设你的DataFrame名为df df = df.sort_values(['球队', '日期']) # 按球队分组,对组内唯一GameID编号并广播到所有行 df['GameNum'] = df.groupby('球队')['GameID'].transform(lambda x: x.factorize()[0] + 1)
方法2:使用rank()密集排名
df = df.sort_values(['球队', '日期']) # 按球队分组,对GameID进行密集排名(相同值同排名,排名连续) df['GameNum'] = df.groupby('球队')['GameID'].rank(method='dense', ascending=True).astype(int)
运行结果
执行后得到的DataFrame如下,符合需求:
| 球队 | 球员 | 日期 | GameID | GameNum |
|---|---|---|---|---|
| Bears | John | 2022-10-01 | A1 | 1 |
| Bears | Dave | 2022-10-01 | A1 | 1 |
| Bears | Steve | 2022-10-01 | A1 | 1 |
| Bulls | Connor | 2022-10-01 | C2 | 1 |
| Bulls | Jack | 2022-10-01 | C2 | 1 |
| Bears | John | 2022-10-03 | A3 | 2 |
内容的提问来源于stack exchange,提问作者David Andrews
相关产品推荐
相关产品推荐

