基于简化的样本数据帧
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