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

如何使用Pandas结合groupby计算指定时间周期内列的滚动平均值

实现方法

你可以用pandas的时间滚动窗口功能完成该需求,具体实现步骤如下:

前置准备

首先确保你已经安装了pandas库,且原始数据已经加载为DataFrame格式。

代码实现

import pandas as pd

# 1. 转换日期列为datetime类型(必须步骤,时间窗口计算依赖标准日期格式)
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')

# 2. 按骑手ID+日期升序排序,保证每个骑手的记录按时间先后排列
df = df.sort_values(by=['Jockey ID', 'Date']).reset_index(drop=True)

# 3. 分组计算1000天内的滚动平均名次
# 参数说明:
# '1000D':窗口长度为1000天
# min_periods=1:只要窗口内有至少1条数据就计算,避免前几行出现空值
df['Mean Position'] = df.groupby('Jockey ID')\
                        .rolling('1000D', on='Date', min_periods=1)['Position']\
                        .mean()\
                        .round(2)\
                        .values

# 如果你需要输出和示例完全一致的带计算说明的字符串格式,可以额外加以下代码:
g = df.groupby('Jockey ID').rolling('1000D', on='Date', min_periods=1)['Position']
df['mean_val'] = g.mean().round(2).values
df['count_val'] = g.count().astype(int).values
df['sum_val'] = g.sum().astype(int).values
df['Mean Position'] = df.apply(lambda x: f"{x['mean_val']} ({x['sum_val']}/{x['count_val']})", axis=1)
# 不需要的中间列可以按需删除:df = df.drop(columns=['mean_val','count_val','sum_val'])

结果说明

运行上述代码后得到的Mean Position列数值和你给出的预期结果完全一致。如果需要调整小数保留位数,修改round()方法的参数即可。

内容的提问来源于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:15:03