数据框(df)包含两列,如下所示:
A B
46 0
45 1
46 1
51 1
47 1
46 1
45 0
48 0
47 0
45 1
49 1
我需要为每三行设计一个滑动窗口类型,例如:
1)前三行,转置列(A)并附加列(B)的第三个条目,所以我们得到一行四列,如下所示:
46 45 46 1
2)然后向下移动一行(即从原始df的第2行开始),重复步骤1,这样我们得到第二个输出如下。
45 46 51 1
3)在每次迭代中,我们得到如下的连续输出:
46 51 47 1
51 47 46 1
47 46 45 0
...
总之,所需的输出是 -
46 45 46 1
45 46 51 1
46 51 47 1
51 47 46 1
47 46 45 0
...
答案 0 :(得分:2)
以下是使用numpy
stride_tricks
的解决方案 -
as_strided = np.lib.stride_tricks.as_strided
w = 3 # window size
i = as_strided(df.A.values, (len(df) - (w - 1), w), df.A.strides * 2)
j = df[['B']].values[(w - 1):]
np.hstack((i, j))
array([[46, 45, 46, 1],
[45, 46, 51, 1],
[46, 51, 47, 1],
[51, 47, 46, 1],
[47, 46, 45, 0],
[46, 45, 48, 0],
[45, 48, 47, 0],
[48, 47, 45, 1],
[47, 45, 49, 1]])