【问题标题】:Filling array with data intersection (fixed window size)用数据交集填充数组(固定窗口大小)
【发布时间】:2018-03-20 17:29:10
【问题描述】:

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

我需要的是固定大小的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

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

【问题讨论】:

  • 这个不清楚。输出应该是 5 行和 7 列。对吗?
  • 5 行 10 列,如示例所示。我们应该使用“窗口”来填充数组,窗口大小为 7,而数组长度为 10...

标签: arrays pandas intersection


【解决方案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

【讨论】:

  • 天才!我会为此花费数年时间)谢谢!
  • @elenaby yw:-) 快乐编码
猜你喜欢
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多