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

Python Pandas如何按索引合并时间戳不同的两个Dataframe

解决方案

你遇到的是时间戳不完全对齐的时间序列DataFrame合并问题,可根据实际需求选择以下3种方案:

方案1:按最近时间戳匹配合并(优先推荐)

使用pandas内置的merge_asof方法,可以直接为其中一个DataFrame的时间戳匹配另一个DataFrame中最近的时间对应数据,不会生成多余的时间行,也不会默认产生NaN。

import pandas as pd

# 第一步:统一将两个DataFrame的索引转换为datetime格式
df.index = pd.to_datetime(df.index)
df_temp.index = pd.to_datetime(df_temp.index)

# 第二步:按最近时间戳合并,以下为以df的时间戳为基准的示例
df_merged = pd.merge_asof(
    df.sort_index(), # merge_asof要求输入必须按时间索引升序排列
    df_temp.sort_index(),
    left_index = True,
    right_index = True,
    direction = 'nearest' # 匹配规则:nearest=最近、backward=前一个最近、forward=后一个最近
)

适用场景:需要保留其中一个DataFrame的原始时间戳,不需要修改时间粒度。


方案2:统一时间粒度后合并

先将两个DataFrame重采样到相同的时间频率,再直接合并即可完全对齐索引。

# 第一步:统一转换索引为datetime格式
df.index = pd.to_datetime(df.index)
df_temp.index = pd.to_datetime(df_temp.index)

# 第二步:重采样到相同时间粒度,示例为1分钟,可按需替换为1S(1秒)、5T(5分钟)等
# 聚合函数可按需替换为sum、first、last等
df_resample = df.resample('1T').mean()
df_temp_resample = df_temp.resample('1T').mean()

# 第三步:直接合并对齐后的DataFrame
df_merged = df_resample.join(df_temp_resample, how='outer')

适用场景:需要统一两个数据的时间粒度,后续做统计分析、时序建模。


方案3:保留所有原始时间戳+缺失值填充

如果要保留两个DataFrame的所有原始时间戳,可以在你之前concat的基础上补充缺失值填充逻辑:

# 先执行你之前的合并排序逻辑
df_merged = pd.concat([df, df_temp]).sort_index()
# 按相邻的最近值填充NaN,limit参数可控制最多填充的间隔数,避免填充时间差过大的错误数据
df_merged = df_merged.ffill(limit=3).bfill(limit=3)

适用场景:需要保留两个数据源的全部原始时间戳记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:27:02