我了解使用一列数据对 Pandas 中的时间序列数据进行OHLC重新采样会很好地工作,例如在以下数据帧上:

>>df
ctime       openbid
1443654000  1.11700
1443654060  1.11700
...

df['ctime']  = pd.to_datetime(df['ctime'], unit='s')
df           = df.set_index('ctime')
df.resample('1H',  how='ohlc', axis=0, fill_method='bfill')


>>>
                     open     high     low       close
ctime
2015-09-30 23:00:00  1.11700  1.11700  1.11687   1.11697
2015-09-30 24:00:00  1.11700  1.11712  1.11697   1.11697
...

但是,如果数据已经是OHLC格式,该怎么办?根据我的收集,API的OHLC方法为每一列计算OHLC切片,因此,如果我的数据采用以下格式:
             ctime  openbid  highbid   lowbid  closebid
0       1443654000  1.11700  1.11700  1.11687   1.11697
1       1443654060  1.11700  1.11712  1.11697   1.11697
2       1443654120  1.11701  1.11708  1.11699   1.11708

当我尝试重新采样时,每个列都会得到一个OHLC,如下所示:
                     openbid                             highbid           \
                        open     high      low    close     open     high
ctime
2015-09-30 23:00:00  1.11700  1.11700  1.11700  1.11700  1.11700  1.11712
2015-09-30 23:01:00  1.11701  1.11701  1.11701  1.11701  1.11708  1.11708
...
                                        lowbid                             \
                         low    close     open     high      low    close
ctime
2015-09-30 23:00:00  1.11700  1.11712  1.11687  1.11697  1.11687  1.11697
2015-09-30 23:01:00  1.11708  1.11708  1.11699  1.11699  1.11699  1.11699
...

                    closebid
                        open     high      low    close
ctime
2015-09-30 23:00:00  1.11697  1.11697  1.11697  1.11697
2015-09-30 23:01:00  1.11708  1.11708  1.11708  1.11708

是否有一个快速的解决方法,有人愿意分享,而我不必深陷于 Pandas 手册中?

谢谢。

ps,有这个答案-Converting OHLC stock data into a different timeframe with python and pandas-但这是4年前,所以我希望能有所进展。

最佳答案

这类似于您链接的答案,但是它更简洁,更快,因为它使用了优化的聚合而不是lambda。

请注意,resample(...).agg(...)语法需要 Pandas 版本0.18.0

In [101]: df.resample('1H').agg({'openbid': 'first',
                                 'highbid': 'max',
                                 'lowbid': 'min',
                                 'closebid': 'last'})
Out[101]:
                      lowbid  highbid  closebid  openbid
ctime
2015-09-30 23:00:00  1.11687  1.11712   1.11708    1.117

关于python - OHLC数据上的 Pandas OHLC聚合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36222928/

10-10 21:52