我有一堆形式的时间序列数据(股票):
DateTime open high low close volume
0 2017-01-02 09:15:00+05:30 8210.10 8211.70 8189.00 8189.55 0
1 2017-01-02 09:16:00+05:30 8188.75 8193.95 8188.75 8189.95 0
2 2017-01-02 09:17:00+05:30 8190.15 8190.75 8173.70 8173.70 0
....
38939 2017-06-01 15:01:00+05:30 9616.45 9617.30 9615.30 9615.85 0
我正在尝试将数据分组:
我的想法是,我将使用每59分钟的数据来预测第60分钟的数据。我已经实现了执行此操作的代码,但是我认为我没有以最佳方式完成它,因为现在,我为每1:59分钟的数据和每60分钟的数据帧提供一系列pandas数据帧。每59分钟的数据我的结果如下所示。它是一个名为predictors
的pandas数据框列表:
[ DateTime open high low close volume
0 2017-01-02 09:15:00+05:30 42.10 42.10 41.75 41.85 3650
1 2017-01-02 09:16:00+05:30 41.85 41.95 41.75 41.95 1573
2 2017-01-02 09:17:00+05:30 41.95 41.95 41.55 41.55 525
3 2017-01-02 09:18:00+05:30 41.55 41.55 41.30 41.45 3938
4 2017-01-02 09:19:00+05:30 41.45 41.60 41.45 41.60 320
5 2017-01-02 09:20:00+05:30 41.60 41.60 41.60 41.60 0
...
58 2017-01-02 10:13:00+05:30 41.25 41.25 41.25 41.25 0,
DateTime open high low close volume
60 2017-01-02 10:15:00+05:30 41.15 41.25 41.15 41.25 100
61 2017-01-02 10:16:00+05:30 41.25 41.25 41.25 41.25 0
62 2017-01-02 10:17:00+05:30 41.25 41.40 41.25 41.35 1623
...
117 2017-01-02 10:23:00+05:30 41.60 41.60 41.60 41.60 0
118 2017-01-02 10:24:00+05:30 41.60 41.60 41.40 41.40 9
... ]
每隔60分钟的数据就是一个名为predictee
的数据框:
DateTime open high low close volume
59 2017-01-02 10:14:00+05:30 41.25 41.25 41.15 41.15 2000
119 2017-01-02 11:14:00+05:30 41.15 41.15 41.15 41.15 0
179 2017-01-02 12:14:00+05:30 41.35 41.35 41.35 41.35 530
现在,我想从预测变量列表中的每个pandas数据帧中检索“close”。它的伪代码现在看起来如下
for each_df in predictors:
closeCol = 'close' column as an numpy array
append closeCol to a new array as an array
这会给我一个新的numpy数组。然而,这个解决方案似乎不是最优的,我想知道我是否做错了什么或者可以做得更好。问题是:这是以我想要的格式存储数据的最佳方式吗?如果是,是否有更优化的方法来获取predictors
数组中的关闭列?
我知道这是一个很长的问题,所以如果需要任何澄清或细节,请告诉我。
答案 0 :(得分:0)
也许您应该使用groupby
。创建一个列'小时'像这样代表小时:
hour_col = df[DateTime].apply(lambda x : datetime.datetime(year=x.year,month=x.month,day=x.day,hour=x.hour))
df_new = df.assign(hour = hour_col)
然后按小时分组:
groups = df_new.groupby('hour')
结果是一个groupby对象,您可以从中访问每小时的数据帧。然后,您可以根据需要查看每个组中的最后一分钟。