如何用Pandas为DataFrame中下半场开始后的赛事时长加45分钟?
实现方法
核心思路
不用复杂的索引处理,利用Pandas的groupby+transform生成掩码快速定位需调整时间的行,结合时间类型运算完成修改。
步骤与代码
- 转换时间格式:先把字符串类型的
playtime转为Pandas的timedelta类型,才能进行时间加减:
import pandas as pd # 假设数据已加载为DataFrame df df['playtime'] = pd.to_timedelta(df['playtime'])
- 生成调整掩码:按
game分组,标记每组中“start of second half”事件之后的所有行(注意匹配原始数据里的单引号):
# 生成掩码:True表示需要加45分钟的行 mask = df.groupby('game')['event'].transform( lambda x: x.eq("'start of second half'").cumsum() > 0 )
逻辑说明:每组内找到目标事件的位置,用cumsum()让该事件及之后的行累计值大于0,生成布尔掩码。
- 调整时间并转回字符串格式:对掩码为True的行添加45分钟,再转回原始的HH:MM:SS字符串格式:
# 给目标行加45分钟 df.loc[mask, 'playtime'] += pd.Timedelta(minutes=45) # 转回字符串格式(去掉timedelta可能带的days前缀) df['playtime'] = df['playtime'].astype(str).str[-8:]
最终效果
处理后的数据如下:
| playtime | event | game | |
|---|---|---|---|
| 0 | 00:10:34 | 'red card for player 10' | game_id_0123 |
| 1 | 00:45:00 | 'start of second half' | game_id_0123 |
| 2 | 00:55:00 | 'goal for team blue' | game_id_0123 |
内容的提问来源于stack exchange,提问作者call me Steve
相关产品推荐
相关产品推荐

