我有一个这样的数据帧
date
2018-02-28 09:00:00 78700.0
2018-02-28 10:00:00 78900.0
2018-02-28 11:00:00 78100.0
2018-02-28 12:00:00 78100.0
2018-02-28 13:00:00 77500.0
...
2018-11-30 11:00:00 70000.0
2018-11-30 12:00:00 69800.0
2018-11-30 13:00:00 69800.0
2018-11-30 14:00:00 69600.0
2018-11-30 15:00:00 69400.0
我想在每行中以一定的长度透视一个时间序列变量(在本例中,timestep是6,所以我希望每行有6列)。下面的预期结果类似于Toeplitz矩阵的子集
date 0 1 2 3 4 5
2018-02-28 09:00:00 78700.0 78900.0 78100.0 78100.0 77500.0 77100.0
2018-02-28 10:00:00 78900.0 78100.0 78100.0 77500.0 77100.0 77100.0
2018-02-28 11:00:00 78100.0 78100.0 77500.0 77100.0 77100.0 76300.0
2018-02-28 12:00:00 78100.0 77500.0 77100.0 77100.0 76300.0 76200.0
2018-02-28 13:00:00 77500.0 77100.0 77100.0 76300.0 76200.0 76700.0
... ... ... ... ... ... ...
2018-11-29 12:00:00 72000.0 72000.0 71800.0 71500.0 71500.0 70000.0
2018-11-29 13:00:00 72000.0 71800.0 71500.0 71500.0 70000.0 70000.0
2018-11-29 14:00:00 71800.0 71500.0 71500.0 70000.0 70000.0 69800.0
2018-11-29 15:00:00 71500.0 71500.0 70000.0 70000.0 69800.0 69800.0
2018-11-30 09:00:00 71500.0 70000.0 70000.0 69800.0 69800.0 69600.0
我只是在新的数据帧中添加了分割的块,但是速度太慢了;( 是否有一种优雅的方式来执行此转换
有一种方法可以使用Hankel matrix和一些数组操作来实现所需的输出。可以使用^{} 函数构造Hankel矩阵
在下面的代码中,我定义了一个自定义函数
time_series_to_hankel()
,它将数据帧、要堆叠在一行中的时间序列变量以及时间步数作为输入如果你想理解所有段落中的基本原理,我建议你一步一步地运行它
范例
相关问题 更多 >
编程相关推荐