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

如何合并含Dates列的Pandas DataFrame并保留全量数据?

解决1分钟数据与5分钟指标的匹配填充问题

核心思路

通过时间向下取整对齐5分钟区间,再用左连接+前向填充实现指标值的批量匹配,既保留所有1分钟数据,又完成指标的对应填充。

具体步骤与代码示例

假设你有两个DataFrame:

  • df_1min:1分钟级股票数据,含Dates(时间戳)、Open/High/Low/Close等行情列
  • df_5min:5分钟级指标数据,含Dates(时间戳)、Indicator(计算出的指标列)
  1. 统一时间区间键
    先确保时间列是datetime类型,再将两个DataFrame的时间戳向下取整到最近的5分钟起始点,生成用于匹配的区间键:

    # 转换时间列为datetime类型(若未转换)
    df_1min['Dates'] = pd.to_datetime(df_1min['Dates'])
    df_5min['Dates'] = pd.to_datetime(df_5min['Dates'])
    
    # 生成5分钟区间起始点列
    df_1min['5min_window'] = df_1min['Dates'].dt.floor('5min')
    df_5min['5min_window'] = df_5min['Dates'].dt.floor('5min')
    

    dt.floor('5min')会把任意时间戳对齐到所属5分钟区间的开头,比如10:02:00会变成10:00:00,10:05:00会变成10:05:00,确保同属一个5分钟区间的1分钟数据和对应指标拥有相同的匹配键。

  2. 左连接合并数据
    以1分钟数据为基础做左连接,保留所有1分钟记录,同时匹配对应区间的指标:

    df_merged = pd.merge(
        df_1min,
        df_5min[['5min_window', 'Indicator']],  # 仅保留匹配键和指标列
        on='5min_window',
        how='left'
    )
    

    这一步后,每个5分钟区间的第一条1分钟数据会有指标值,后续4条数据的Indicator列会是缺失值(NaN)。

  3. 填充缺失的指标值
    用前向填充(ffill())把同一个5分钟区间的指标值填充到所有对应1分钟记录:

    df_merged['Indicator'] = df_merged['Indicator'].ffill()
    

    这样每个5分钟区间内的5条1分钟数据都会拥有相同的指标值,且1分钟数据的连续性完全保留。

  4. 清理临时列(可选)
    如果不需要5min_window这个临时匹配键,可以删除:

    df_merged = df_merged.drop('5min_window', axis=1)
    

关键说明

  • 若你的5分钟指标时间本身就是区间起始点(比如正好是10:00:00、10:05:00),可以跳过对df_5min的dt.floor处理,直接用原Dates列作为匹配键。
  • 确保df_5min的时间区间覆盖df_1min的全部时间范围,若有1分钟数据无对应指标,ffill()会用最后一个有效的指标值填充;若不需要这种行为,可以根据需求调整填充逻辑(比如用bfill()或固定值填充)。

内容的提问来源于stack exchange,提问作者bugrahaskan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:00:23