如何合并不同结束日期的时间序列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
相关产品推荐
相关产品推荐

