熊猫重新采样每小时OHLC到每日OHLC

时间:2017-11-18 11:35:12

标签: python python-3.x pandas dataframe

我有一个每小时OHLC的数据框如下(请忽略OHLC的值,我输入它们以便更好地说明),

hr_df =
                        Close      High       Low      Open
2017-09-04 05:00:00  0.715035  0.715035  0.715035  0.715035
2017-09-04 06:00:00  0.715035  0.715045  0.715015  0.715035
2017-09-04 07:00:00  0.715040  0.715050  0.714035  0.715035
:
:
2017-09-05 05:00:00  0.715045  0.715105  0.714985  0.715035
2017-09-05 06:00:00  0.715040  0.716045  0.714605  0.715035
2017-09-05 07:00:00  0.715040  0.717045  0.713225  0.715035
:
:
2017-09-06 05:00:00  0.715040  0.714045  0.713355  0.715035

我想将其重新采样为每日OHLC,例如,

day_df =
               Close      High       Low      Open
2017-09-04  0.715035  0.715035  0.715035  0.715035
2017-09-05  0.715035  0.715045  0.715015  0.715035
2017-09-06  0.715040  0.715050  0.714035  0.715035
2017-09-07  0.715045  0.715105  0.714985  0.715035
2017-09-08  0.715040  0.716045  0.714605  0.715035
2017-09-09  0.715040  0.714045  0.713355  0.715035
2017-09-10  0.715040  0.717045  0.713225  0.715035

我尝试使用pandas resample方法,day_df = hr_df.resample('D').pad()day_df = hr_df.resample('D').ohlc(),但它无效。我知道我可能没有使用正确的方法。如果有人可以指导我使用替代解决方案或使用正确的方法,我将非常感激。

2 个答案:

答案 0 :(得分:5)

我认为您需要按Resampler.aggdictionary进行缩减,其中包含列名称和函数值的键:

day_df = (hr_df.resample('D')
               .agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}))
print (day_df)
                Open      High    Close       Low
2017-09-04  0.715035  0.715050  0.71504  0.714035
2017-09-05  0.715035  0.717045  0.71504  0.713225
2017-09-06  0.715035  0.714045  0.71504  0.713355

答案 1 :(得分:0)

尝试使用 pd.Grouper。例如,如果对是外汇对,您可以将其与新分组的日期一起用作索引:

hr_df.groupby([pd.Grouper(key='date',freq='D'), 'pair']).agg(
{'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}

)