如何合并不同粒度的时间序列DataFrame?每日与分钟级数据整合
合并时间序列DataFrame的解决方案
步骤说明
要实现将日度记录的df1与分钟级记录的df2合并,且保持value1和value2在两次记录间隔内不变,可使用Pandas的merge_asof方法,这是处理这类时间序列不等连接的高效方案。
具体代码
- 转换时间列为datetime类型
首先确保两个DataFrame的timestamp列是Pandas可识别的时间格式:
import pandas as pd # 转换时间列 df1['timestamp'] = pd.to_datetime(df1['timestamp']) df2['timestamp'] = pd.to_datetime(df2['timestamp'])
- 执行时间序列合并
使用merge_asof将df2的每个时间点匹配到df1中最近的、不晚于该时间的记录,自动实现间隔内值的延续:
# 按时间合并,direction='backward'表示匹配最近的前序记录 combined_df = pd.merge_asof( df2.sort_values('timestamp'), df1.sort_values('timestamp'), on='timestamp', direction='backward' ) # 调整列顺序与期望结果一致 combined_df = combined_df[['value1', 'value2', 'value3', 'timestamp']]
原理说明
merge_asof会对两个已排序的时间序列进行逐行匹配,direction='backward'确保每个df2的时间点都能找到df1中最接近且不超过它的记录,完美满足"间隔内保持上一次记录值"的需求。- 如果
df2中存在早于df1最早记录的时间点,对应value1和value2会显示为NaN,可根据需求用combined_df[['value1', 'value2']] = combined_df[['value1', 'value2']].fillna(method='bfill')或指定值填充。
内容的提问来源于stack exchange,提问作者prof31
相关产品推荐
相关产品推荐

