You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pandas按player_id计算每条记录距上一场比赛的天数

解决DataFrame新增球员上一场比赛间隔天数列的问题

我来帮你搞定这个需求!你需要给每个球员的每条比赛记录计算距离上一场的天数,首条记录显示nan。这里的关键是必须先按球员和比赛日期排序,不然直接计算会因为记录顺序混乱得到错误结果。

完整实现步骤

  1. 确保日期列是datetime类型:如果你的match_date是字符串格式,先转成datetime才能计算天数差。
  2. 按球员和日期排序:把每个球员的记录按比赛时间从早到晚排列,这样才能正确获取上一场的日期。
  3. 分组计算间隔天数:按player_id分组后,用shift()获取同组内上一条记录的日期,再计算当前日期与上一条的差值,提取天数。

代码示例

首先我们先创建你提供的示例数据:

import pandas as pd

data = {
    'event_id': [1470993, 1492031, 1489240, 1495581, 1490222, 1469624, 1493822, 1428946, 1483245, 1472260],
    'player_id': [227485, 227485, 227485, 227485, 227485, 227485, 227485, 313444, 313444, 313444],
    'match_date': ['2015-11-29', '2016-07-23', '2016-06-19', '2016-09-02', '2016-07-03', '2015-11-14', '2016-08-13', '2014-08-10', '2016-05-21', '2015-12-13']
}

df = pd.DataFrame(data)

接下来执行处理步骤:

# 1. 转换日期列类型
df['match_date'] = pd.to_datetime(df['match_date'])

# 2. 按player_id和match_date升序排序
df_sorted = df.sort_values(by=['player_id', 'match_date']).reset_index(drop=True)

# 3. 计算days_since_last
df_sorted['days_since_last'] = df_sorted.groupby('player_id')['match_date'].diff().dt.days

最终结果

处理后的df_sorted会是这样:

event_idplayer_idmatch_datedays_since_last
14696242274852015-11-14NaN
14709932274852015-11-2915.0
14892402274852016-06-19203.0
14902222274852016-07-0314.0
14920312274852016-07-2320.0
14938222274852016-08-1321.0
14955812274852016-09-0220.0
14289463134442014-08-10NaN
14722603134442015-12-13490.0
14832453134442016-05-21160.0

为什么要排序?

你提供的原始数据里,同一个球员的记录是乱序的(比如player_id=227485的第一条记录是2015-11-29,但更早的2015-11-14在第5行)。如果不先排序就直接用groupby+shift,计算出来的间隔天数会是基于原始乱序的记录,结果完全错误。排序这一步是关键!

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

火山引擎 最新活动