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

如何用Pandas高效计算球员被替换的离场时间?

问题描述

我用足球比赛场景来举例:现有一张记录球员登场信息的表格:

player | position          | start minute
------------------------------
Bob    | keeper            | 0
Pedro  | Center Midfielder | 0
Joe    | Striker           | 0
Tim    | Center Midfielder | 20

需要添加end minute列记录球员被换下场的时间:

  • 同一位置下,后登场球员的start minute就是前一位该位置球员的end minute(比如Pedro在第20分钟被同位置的Tim替换下场)
  • 若没有后续球员替换,下场时间为90分钟
  • 最终可计算play duration(end minute与start minute的差值)

目前仅能通过暴力法处理单次替换场景,需要支持无限次替换的简洁Pandas实现方式。

解决方案

可以通过按位置分组后,利用shift方法获取下一位球员的登场时间来实现,这是支持无限次替换的高效方案:

核心思路

  1. 按position分组,确保每组内的球员按登场时间排序(如果原始数据未排序,需先执行排序操作)
  2. 对每组的start minute调用shift(-1),拿到下一位球员的登场时间,这就是当前球员的下场时间
  3. 把没有后续替换的球员的end minute填充为90
  4. 计算上场时长

代码实现

import pandas as pd

# 构造示例数据
data = {
    'player': ['Bob', 'Pedro', 'Joe', 'Tim'],
    'position': ['keeper', 'Center Midfielder', 'Striker', 'Center Midfielder'],
    'start minute': [0, 0, 0, 20]
}
df = pd.DataFrame(data)

# 按位置分组,获取下一位球员的登场时间作为end minute
df['end minute'] = df.groupby('position')['start minute'].shift(-1)
# 填充无替换球员的下场时间为90
df['end minute'] = df['end minute'].fillna(90)
# 计算上场时长
df['play duration'] = df['end minute'] - df['start minute']

# 查看结果
print(df)

输出结果

player          position  start minute  end minute  play duration
0      Bob            keeper             0        90.0           90.0
1    Pedro  Center Midfielder             0        20.0           20.0
2      Joe            Striker             0        90.0           90.0
3      Tim  Center Midfielder            20        90.0           70.0

适配多次替换场景

如果同一位置有多次替换(比如同一位置有3位及以上球员先后登场),这个方法依然适用。shift(-1)会自动获取每组内下一条记录的start minute,完美支持无限次替换的需求。比如新增一名第60分钟登场的Center Midfielder球员,代码会自动把Tim的end minute设为60,新球员的end minute设为90。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:01:10