填充数据与数据交集(固定窗口大小)

时间:2018-03-20 17:29:11

标签: arrays pandas intersection

我有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

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

1 个答案:

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