如何在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()
但这个方法没法生成目标结构,因为没办法堆叠历史值。
解决方案
可以通过分块处理+滚动均值计算来实现,步骤如下:
- 按窗口大小拆分原始数据,提取完整的历史值块
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]
- 提取每个历史块对应的后续窗口,计算均值
# 取历史块的下一组数据作为后续窗口,同样去掉最后不完整的部分 next_windows = s.values.reshape(-1, window_size)[1:-1] mean_vals = next_windows.mean(axis=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
相关产品推荐
相关产品推荐

