基于Datetime索引将日频pivot列合并至分钟频DataFrame并前向填充
解决方案
首先纠正你代码中的一个错误:在计算day_df['pivot']时,你误用了分钟级DataFrame df的列,这会导致索引不匹配。正确的做法是基于日频的day_df自身的High、Low、Close计算:
day_df['pivot'] = (day_df['High'] + day_df['Low'] + day_df['Close']) / 3
针对你要将日频pivot列对齐到分钟级DataFrame并前向填充的需求,提供两种高效实现方式:
方法一:利用reindex自动对齐并填充
通过将日频的pivot列重新索引到分钟级DataFrame的时间索引,使用ffill参数自动完成前向填充:
df['pivot'] = day_df['pivot'].reindex(df.index, method='ffill')
原理:reindex会尝试将日频索引与分钟级索引匹配,缺失的日期对应的分钟数据会自动取用最近的前一个日频pivot值,完美实现按日期对齐+前向填充的需求。
方法二:提取日期后映射匹配
提取分钟级索引的日期部分(忽略时分秒),直接映射到日频pivot列的值:
df['pivot'] = df.index.floor('D').map(day_df['pivot'])
原理:floor('D')将每个时间戳向下取整到当日零点,用这个日期作为键去day_df中匹配对应的pivot值,同一天的所有分钟数据都会获取到当日的pivot值,无需额外填充。
为什么你的pd.merge(how='cross')无效?
cross类型的合并会生成两个DataFrame的笛卡尔积,也就是每一行分钟数据都会和所有日频pivot值组合,完全不符合基于日期对齐的需求,因此无法得到正确结果。
内容的提问来源于stack exchange,提问作者Royce Anton Jose
相关产品推荐
相关产品推荐

