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

使用Pandas计算滚动向前平均值的技术求助

嘿,这个需求其实很好解决,我来给你拆解清楚~

首先得说清楚:你想计算的「未来10到15天的平均值」,本质上是对每一行来说,取它之后第10个到第15个数据点(一共6个值)的平均值对吧?你之前尝试的df.rolling(-10,-15)行不通,是因为Pandas的rolling()函数不支持直接传入负的范围参数——它的窗口参数要么是整数(指定连续元素个数),要么是时间字符串(针对时间索引),没法直接用负索引来定义未来窗口。

而你提到的回溯场景df.rolling(15,10).mean()能运行,估计是你用了窗口大小+最小周期的参数组合,但这个逻辑没法直接套到未来窗口上。不过我们可以换个思路,用shift()和rolling()组合来实现,非常直观:

核心思路

把数据向前偏移10位,让当前行对应「未来第10天」的数据,然后对偏移后的数据计算连续6个元素的滚动平均值——这样得到的结果,正好就是原数据中当前行的「未来10到15天」的平均值。

具体代码(针对整数索引)

假设你的DataFrame是df,目标列是value(如果是整列操作就去掉列名):

# 计算未来10到15天的平均值(包含第10和第15天,共6个数据点)
future_10_15_mean = df['value'].shift(-10).rolling(window=6).mean()

举个小例子验证:如果df['value']是[0,1,2,...,20],那第0行的未来10-15天值是10,11,12,13,14,15,平均值是12.5,用上面的代码计算出来的第0行结果正好是12.5,完全正确。

如果是时间索引的情况

如果你的索引是datetime类型,用时间偏移和时间窗口会更准确(自动处理缺失日期):

import pandas as pd

# 向前偏移10天,然后计算连续6天的滚动平均
future_10_15_mean = df['value'].shift(-pd.Timedelta(days=10)).rolling(window='6D').mean()

补充说明

如果你想要的是「未来10天之后到15天之前」(不包含第10天),那只需要把偏移量改成-11,窗口大小改成5即可,逻辑是一样的。

这样操作比先算回溯平均再移位要更直接,而且结果完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:07:05