如何将小时级RSI-1H列映射合并到分钟级DataFrame中?
合并分钟级与小时级DataFrame匹配RSI值
问题
需要将小时级的RSI-1H值匹配到分钟级数据中,使同一小时内的所有分钟行对应相同的RSI值。涉及两个DataFrame:
df_minutes:存储分钟级行情数据,索引为datetime类型df_hourly:存储小时级RSI-1H数据,索引为小时起始datetime
df_minutes 示例
index unix symbol open high low date 2022-01-01 00:00:00 525599 1640995200000 AVAXUSDT 109.43 109.88 109.42 2022-01-01 00:01:00 525598 1640995260000 AVAXUSDT 109.75 110.09 109.58 2022-01-01 00:02:00 525597 1640995320000 AVAXUSDT 109.98 110.16 109.87 2022-01-01 00:03:00 525596 1640995380000 AVAXUSDT 110.06 110.11 109.74 2022-01-01 00:04:00 525595 1640995440000 AVAXUSDT 109.76 110.06 109.72 ... 2022-01-01 01:08:00 525591 1640995680000 AVAXUSDT 110.24 110.30 110.17 2022-01-01 01:09:00 525590 1640995740000 AVAXUSDT 110.18 110.29 110.02 .... 2022-01-01 02:18:00 525591 1640995680000 AVAXUSDT 110.24 110.30 110.17 2022-01-01 02:19:00 525590 1640995740000 AVAXUSDT 110.18 110.29 110.02
df_hourly 示例
RSI-1H date 2022-01-01 00:00:00 56 2022-01-01 01:00:00 58 2022-01-01 02:00:00 59 2022-01-01 03:00:00 60 2022-01-01 04:00:00 59
期望结果
最终final_df中,同一小时内的所有分钟行对应相同的RSI-1H值:
index unix symbol open high low RSI-1H date 2022-01-01 00:00:00 525599 1640995200000 AVAXUSDT 109.43 109.88 109.42 56 2022-01-01 00:01:00 525598 1640995260000 AVAXUSDT 109.75 110.09 109.58 56 2022-01-01 00:02:00 525597 1640995320000 AVAXUSDT 109.98 110.16 109.87 56 2022-01-01 00:03:00 525596 1640995380000 AVAXUSDT 110.06 110.11 109.74 56 2022-01-01 00:04:00 525595 1640995440000 AVAXUSDT 109.76 110.06 109.72 56 ... 2022-01-01 01:08:00 525591 1640995680000 AVAXUSDT 110.24 110.30 110.17 58 2022-01-01 01:09:00 525590 1640995740000 AVAXUSDT 110.18 110.29 110.02 58 .... 2022-01-01 02:18:00 525591 1640995680000 AVAXUSDT 110.24 110.30 110.17 59 2022-01-01 02:19:00 525590 1640995740000 AVAXUSDT 110.18 110.29 110.02 59
解决方案
方法一:利用索引取整+合并
# 给df_minutes添加小时级匹配键:将分钟索引向下取整到小时起始时间 df_minutes['hour_key'] = df_minutes.index.floor('H') # 基于hour_key和df_hourly的索引进行左合并,保留所有分钟行 final_df = df_minutes.merge(df_hourly, left_on='hour_key', right_index=True, how='left') # 可选:删除临时生成的hour_key列 final_df = final_df.drop('hour_key', axis=1)
方法二:字典映射(更简洁)
# 将df_hourly的RSI-1H转为字典,键为小时时间戳,值为对应RSI rsi_hourly_map = df_hourly['RSI-1H'].to_dict() # 对分钟索引取整到小时,然后映射对应的RSI值 df_minutes['RSI-1H'] = df_minutes.index.floor('H').map(rsi_hourly_map) final_df = df_minutes
说明
index.floor('H'):将datetime类型的分钟索引转为对应小时的起始时间(例如2022-01-01 00:05:00转为2022-01-01 00:00:00),确保能和df_hourly的索引完全匹配。- 两种方法都能实现需求,方法二更高效,无需额外列。
内容的提问来源于stack exchange,提问作者userHG
相关产品推荐
相关产品推荐

