【问题标题】:Rolling window from time-series时间序列的滚动窗口
【发布时间】:2017-05-23 15:12:19
【问题描述】:

我想知道是否有一种简单而简洁的方法可以使用 Pandas(等)从时间序列数据创建滚动窗口表示?

例如,考虑以下 Series 对象:

x = pd.Series(np.linspace(0,10,100))
df_wind = pd.DataFrame(roll_wind_func(x, wind_size=5))
Out: 
           0         1         2         3             4
0   0.000000  0.324699  0.614213  0.837166  9.694003e-01
1   0.324699  0.614213  0.837166  0.969400  9.965845e-01
2   0.614213  0.837166  0.969400  0.996584  9.157733e-01
3   0.837166  0.969400  0.996584  0.915773  7.357239e-01
4   0.969400  0.996584  0.915773  0.735724  4.759474e-01
5   0.996584  0.915773  0.735724  0.475947  1.645946e-01
6   0.915773  0.735724  0.475947  0.164595 -1.645946e-01
7   0.735724  0.475947  0.164595 -0.164595 -4.759474e-01
8   0.475947  0.164595 -0.164595 -0.475947 -7.357239e-01
9   0.164595 -0.164595 -0.475947 -0.735724 -9.157733e-01
10 -0.164595 -0.475947 -0.735724 -0.915773 -9.965845e-01
11 -0.475947 -0.735724 -0.915773 -0.996584 -9.694003e-01
12 -0.735724 -0.915773 -0.996584 -0.969400 -8.371665e-01
13 -0.915773 -0.996584 -0.969400 -0.837166 -6.142127e-01
14 -0.996584 -0.969400 -0.837166 -0.614213 -3.246995e-01
15 -0.969400 -0.837166 -0.614213 -0.324699 -2.449294e-16 

我已经实现(虽然丑陋)roll_wind_func(data=, wind_size=),但我想知道 Pandas 是否提供更简单的解决方案(没有循环)

【问题讨论】:

标签: pandas


【解决方案1】:

怎么样:

pd.DataFrame({i: x.shift(-i) for i in range(5)}).dropna()

【讨论】:

  • 谢谢,但我在最后添加了.dropna() 以获得所需的结果。
猜你喜欢
  • 2020-01-20
  • 2012-05-20
  • 1970-01-01
  • 2019-12-23
  • 2017-03-17
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2020-07-13
相关资源
最近更新 更多