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

如何在Pandas中计算滚动均值并堆叠历史滞后变量?

问题:Pandas中生成滚动窗口历史值+后续窗口均值的结构

我有一个形状为(2000,1)的Pandas DataFrame,想要计算滚动均值的同时保留历史值作为滞后变量。举个例子,现有如下Series:

1
2
3
4
5
6
7
8
9
10

当滚动窗口设为3时,期望得到这样的结构:

1,2,3,mean(4,5,6)
4,5,6,mean(7,8,9)

我试过用rolling函数:

train_ds=train_ds.var1.rolling(3).mean()

但这个方法没法生成目标结构,因为没办法堆叠历史值。

解决方案

可以通过分块处理+滚动均值计算来实现,步骤如下:

  1. 按窗口大小拆分原始数据,提取完整的历史值块
import pandas as pd

# 替换为你的实际数据
s = pd.Series([1,2,3,4,5,6,7,8,9,10])
window_size = 3

# 把数据按窗口大小分块,去掉最后不完整的块
history_blocks = s.values.reshape(-1, window_size)[:-1]
  1. 提取每个历史块对应的后续窗口,计算均值
# 取历史块的下一组数据作为后续窗口,同样去掉最后不完整的部分
next_windows = s.values.reshape(-1, window_size)[1:-1]
mean_vals = next_windows.mean(axis=1)
  1. 拼接历史块和均值,生成目标结构
# 构造结果DataFrame
result = pd.DataFrame(history_blocks, columns=[f'历史值_{i+1}' for i in range(window_size)])
result['后续窗口均值'] = mean_vals

最终输出结果:

历史值_1  历史值_2  历史值_3  后续窗口均值
0      1      2      3        5.0
1      4      5      6        8.0

如果你的原始DataFrame是(2000,1),只需要将代码中的s替换为train_ds['var1']即可。若2000无法被3整除,可根据业务需求决定是否保留最后不完整的块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:07:22