如何重新取样pandas df数据到5分钟OHLC数据

时间:2016-07-30 10:29:23

标签: python-3.x pandas dataframe resampling

我有一个带有刻度数据的pandas df'instr_bar'如下:

time
2016-07-29 16:07:24     5.72
2016-07-29 16:07:24     5.72
2016-07-29 16:07:24     5.72
2016-07-29 16:07:58     5.72
2016-07-29 16:07:58     5.72
2016-07-29 16:09:49     5.70
2016-07-29 16:09:50     5.73
2016-07-29 16:11:14     5.73
2016-07-29 16:11:14     5.73
2016-07-29 16:14:53     5.77
2016-07-29 16:14:53     5.77
2016-07-29 16:17:27     5.75
2016-07-29 16:17:43     5.76
2016-07-29 16:17:43     5.76

我想把它变成5分钟的OHLC。在许多情况下,索引不是唯一的。

然后我使用以下代码:instr_bar = instr_bar.resample('5Min').ohlc()

然后我得到以下df:

                     open   high    low  close
time                                           
2016-07-29 15:40:00   5.74   5.74   5.74   5.74
2016-07-29 15:45:00    NaN    NaN    NaN    NaN
2016-07-29 15:50:00   5.75   5.75   5.75   5.75
2016-07-29 15:55:00   5.75   5.75   5.72   5.72
2016-07-29 16:00:00   5.72   5.72   5.72   5.72
2016-07-29 16:05:00   5.72   5.73   5.70   5.73
2016-07-29 16:10:00   5.73   5.77   5.73   5.77
2016-07-29 16:15:00   5.75   5.76   5.72   5.72
2016-07-29 16:20:00    NaN    NaN    NaN    NaN
2016-07-29 16:25:00   5.72   5.72   5.72   5.72

Q1:如何使用上次观察到的值回填NaN?

第二季度:我现在也在交易/开放时间(09:00-16:30)之外还有NaNs,如何摆脱它们?

1 个答案:

答案 0 :(得分:9)

尝试bfill()

instr_bar = instr_bar.resample('5T').ohlc().bfill()

ffill()

instr_bar = instr_bar.resample('5T').ohlc().ffill()

取决于你想要达到的目标

如果您想按时间过滤行,可以使用between_time()方法:

instr_bar.between_time('09:00', '16:30')

共:

instr_bar = instr_bar.resample('5T').ohlc().ffill().between_time('09:00', '16:30')