You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将小时级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:20:01