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

如何合并不同结束日期的时间序列DataFrame并保留完整时间范围

解决时间序列DataFrame全范围合并问题

你原来用的pd.merge默认是内连接(how='inner'),只会保留两个DataFrame中timestamp的交集部分,所以达不到保留完整时间范围的需求。下面给你两种可行的解决方案:

方法1:修改merge的连接方式为外连接

直接在merge时指定how='outer',这样会保留所有timestamp,交集外的缺失列自动填充NaN:

两个DataFrame的情况

df_merged = pd.merge(df1, df2, on='timestamp', how='outer')

多个DataFrame批量合并(沿用你原来的reduce写法)

from functools import reduce
df_to_merge = [df1, df2]
df_merged = reduce(lambda left, right: pd.merge(left, right, on='timestamp', how='outer'), df_to_merge)

方法2:利用索引对齐的concat方法

因为两个DataFrame采样频率相同,可以先把timestamp设为索引,再用concat按列合并,pandas会自动对齐所有时间索引,缺失值补NaN:

# 先设置timestamp为索引
df1_indexed = df1.set_index('timestamp')
df2_indexed = df2.set_index('timestamp')

# 按列合并后重置索引回原结构
df_merged = pd.concat([df1_indexed, df2_indexed], axis=1).reset_index()

两种方法都能得到你期望的结果:包含从最早的2010-10-07到最晚的2010-10-18的所有时间点,col1在df1没有的时间点显示NaN,col2在df2没有的时间点显示NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:02:01