如何基于pandas DataFrame生成时间序列预测用的滚动窗口数据集
时间序列滚动窗口转换方案
下面提供两种无遍历的高效实现方式,均可以满足你的需求:
方法1:NumPy滑动窗口视图(推荐,大内存数据最优)
该方法基于NumPy的内存视图实现,不会产生额外的数据拷贝,性能远高于循环遍历,适合处理大规模时间序列数据。
import numpy as np import pandas as pd from numpy.lib.stride_tricks import sliding_window_view # 读取数据后可根据需要先按时间正序排序 # df = df.sort_values("Date").reset_index(drop=True) value_arr = df["Failures"].values # 窗口长度为4,加1位目标值,总窗口长度为5 window_total_len = 5 windows = sliding_window_view(value_arr, window_shape=window_total_len)
输出的windows是二维数组,每一行的格式为[特征1, 特征2, 特征3, 特征4, 目标值],完全符合你给出的示例格式。
方法2:Pandas Rolling实现(小数据量写法更简洁)
如果你更习惯用pandas接口,小数据量场景下可以直接用rolling方法实现,你之前使用rolling未成功是因为没有提取完整窗口的数值:
window_len = 4 # 滑动窗口长度设为4+1,每个窗口返回完整的特征+目标序列 window_series = df["Failures"].rolling(window_len + 1).apply(lambda x: x).dropna() # 转成numpy数组格式:window_arr = np.stack(window_series.values)
可选:转成结构化DataFrame
如果需要保留表格格式,可以给生成的窗口设置列名:
cols = [f"lag_{i}" for i in range(4, 0, -1)] + ["target"] window_df = pd.DataFrame(windows, columns=cols)
内容的提问来源于stack exchange,提问作者hkj447
相关产品推荐
相关产品推荐

