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

如何使用Pandas与groupby计算特定条件下指定时间段的列滚动均值

这是同类问题的变体,仅新增了Track列:

DateJockey IDPositionTrack
23-12-201843401Sha Tin
25-11-201843405Sha Tin
19-12-2018434010Happy Valley
01-01-201943403Happy Valley
18-10-201784431Sha Tin
18-02-201884436Sha Tin
12-05-201884437Happy Valley

需求为:按Jockey ID分组,计算过去1000天内骑手仅在Sha Tin赛道的最终名次Position的滚动均值,非Sha Tin赛道对应的均值字段留空,预期输出结果如下:

DateJockey IDPositionTrackMean Position
23-12-201843401Sha Tin1 (1/1)
25-11-201843405Sha Tin3 (1+5)/2
19-12-2018434010Happy Valley
01-01-201943403Happy Valley
18-10-201784431Sha Tin1 (1/1)
18-02-201884436Sha Tin3.5 (1+6)/2
12-05-201884437Happy Valley

解决方案

你可以通过pandas的时间窗口滚动计算实现该需求,示例代码如下:

import pandas as pd

# 假设原始数据存储在df变量中
# 1. 日期格式转换+按时间升序排序
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')
df = df.sort_values('Date').reset_index(drop=True)

# 2. 仅对Sha Tin赛道的记录做分组滚动均值计算
sha_tin_filter = df['Track'] == 'Sha Tin'
df.loc[sha_tin_filter, 'Mean Position'] = (
    df[sha_tin_filter]
    .groupby('Jockey ID')
    .rolling('1000D', on='Date')['Position']
    .mean()
    .reset_index(drop=True)
)

# 3. 非Sha Tin赛道的均值字段留空
df['Mean Position'] = df['Mean Position'].fillna('')

# 若需要输出示例中带计算过程的字符串格式,可额外按分组聚合历史位置信息做字符串拼接即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:54:09