用数据交集填充数组(固定 window 大小)

Filling array with data intersection (fixed window size)

我有从 1 到 30 的数字,我把它们放在固定长度为 10 的数组中 这是我最初拥有的:

1  2  3  4  5  6  7  8  9  10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

我需要的是固定大小window=7,应该有数据交集,这样我就有5行而不是3行(1-10、8-17、15-24、22- 30、29-30):

1   2   3   4   5   6   7   8   9  10
8   9  10  11  12  13  14  15  16  17
15  16 17  18  19  20  21  22  23  24
22  23 24  25  26  27  28  29  30   0
29  30  0   0   0   0   0   0   0   0

我不知道如何实现这个... 有人可以帮我吗? 提前致谢!

这是我想到的方法

Newdf=pd.DataFrame(data=df.values.ravel(),index=np.arange(len(df.values.ravel()))//7)
n=10-7

s=Newdf.groupby(level=0)[0].apply(list).apply(pd.Series)
s
Out[824]:
      0     1     2     3     4     5     6
0   1.0   2.0   3.0   4.0   5.0   6.0   7.0
1   8.0   9.0  10.0  11.0  12.0  13.0  14.0
2  15.0  16.0  17.0  18.0  19.0  20.0  21.0
3  22.0  23.0  24.0  25.0  26.0  27.0  28.0
4  29.0  30.0   NaN   NaN   NaN   NaN   NaN

pd.concat([s,s.iloc[:,:n].shift(-1)],1).fillna(0)
Out[832]: 
      0     1     2     3     4     5     6     0     1     2
0   1.0   2.0   3.0   4.0   5.0   6.0   7.0   8.0   9.0  10.0
1   8.0   9.0  10.0  11.0  12.0  13.0  14.0  15.0  16.0  17.0
2  15.0  16.0  17.0  18.0  19.0  20.0  21.0  22.0  23.0  24.0
3  22.0  23.0  24.0  25.0  26.0  27.0  28.0  29.0  30.0   0.0
4  29.0  30.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0