我有一个每小时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()
,但它无效。我知道我可能没有使用正确的方法。如果有人可以指导我使用替代解决方案或使用正确的方法,我将非常感激。
答案 0 :(得分:5)
我认为您需要按Resampler.agg
按dictionary
进行缩减,其中包含列名称和函数值的键:
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'}
)