Skip to main content
 首页 » 编程设计

python之Pandas 将每小时 OHLC 重采样为每日 OHLC

2025年05月04日14虾米姐

我有一个每小时 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() 但它不工作。我知道我可能没有使用正确的方法。如果有人可以指导我找到替代解决方案或正确的使用方法,我将不胜感激。

请您参考如下方法:

我认为您需要按 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