用数据交集填充数组(固定 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
我有从 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