使用滑动窗口和转置进行分组

时间:2017-11-27 07:29:40

标签: python pandas numpy dataframe

数据框(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
...

1 个答案:

答案 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]])