我有1到30的数字,我把它们放在固定的lenth = 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
我需要的是固定大小的窗口= 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
我不知道如何实现这个...... 有人可以帮帮我吗? 提前谢谢!
答案 0 :(得分:1)
这是我想到的方法
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