在多变量时间序列上使用前滚窗口创建数据帧



基于简化的样本数据帧

import pandas as pd
import numpy as np
timestamps = pd.date_range(start='2017-01-01', end='2017-01-5', inclusive='left')
values = np.arange(0,len(timestamps))
df = pd.DataFrame({'A': values ,'B' : values*2},
index = timestamps )
print(df)
A  B
2017-01-01  0  0
2017-01-02  1  2
2017-01-03  2  4
2017-01-04  3  6

我想使用大小为2、步长为1的前滚窗口来创建一个类似的数据帧

timestep_1  timestep_2  target  
0  A 0           1           2         
B 0           2           4         
1  A 1           2           3
B 2           4           6

也就是说,每个窗口步骤都应该创建一个数据项,其中a和B这两个值在此窗口中,a和B值位于窗口右侧,作为目标值。

我的第一个想法是使用熊猫

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rolling.html

但这似乎只适用于聚合函数,如sum,这是一个不同的用例。

关于如何实现这种基于滚动窗口的采样方法,有什么想法吗?

这里有一种方法:

window_size = 3
new_df = pd.concat(
[
df.iloc[i : i + window_size, :]
.T.reset_index()
.assign(other_index=i)
.set_index(["other_index", "index"])
.set_axis([f"timestep_{j}" for j in range(1, window_size)] + ["target"], axis=1)
for i in range(df.shape[0] - window_size + 1)
]
)
new_df.index.names = ["", ""]
print(df)
# Output
timestep_1  timestep_2  target
0 A           0           1       2
B           0           2       4
1 A           1           2       3
B           2           4       6

相关内容

  • 没有找到相关文章