如何用Python将不同频率DataFrame的15分钟均值迁移至另一数据集?
解决不同频率时间序列的平均值迁移问题
当然可以搞定这个问题!你碰到的是时间序列对齐里的常见场景——不同频率的时间戳没法直接用普通的pd.merge或pd.concat匹配,得先做时间频率的统一或者智能匹配。我给你几个实用的方案,都是用pandas就能轻松实现的:
方法一:重采样+向前填充(最直观)
这个方法的思路是先把15分钟频率的数据集转换成5分钟频率(用向前填充的方式补全每个15分钟窗口内的三个5分钟点),之后就能和你的5分钟数据集直接合并了。
步骤示例:
import pandas as pd # 1. 确保时间列是datetime类型(这是所有时间序列操作的前提!) df_5min['Date and Time'] = pd.to_datetime(df_5min['Date and Time']) df_15min['Date and Time'] = pd.to_datetime(df_15min['Date and Time']) # 2. 如果你的15分钟数据还没做平均值聚合,先聚合(如果已经是15分钟平均值可以跳过这步) df_15min_avg = df_15min.set_index('Date and Time').resample('15T').mean().reset_index() # 3. 将15分钟平均值重采样为5分钟频率,用向前填充补全空缺 df_15min_resampled = df_15min_avg.set_index('Date and Time').resample('5T').ffill().reset_index() # 4. 合并两个5分钟频率的数据集 merged_df = pd.merge(df_5min, df_15min_resampled, on='Date and Time', how='left')
方法二:用merge_asof做智能时间匹配
如果你的15分钟时间戳不一定严格是每小时的00/15/30/45分(比如有偏移),可以用merge_asof来做近似匹配,自动把每个5分钟点对应到最近的15分钟数据上。
步骤示例:
import pandas as pd # 1. 同样先确保时间列是datetime类型 df_5min['Date and Time'] = pd.to_datetime(df_5min['Date and Time']) df_15min['Date and Time'] = pd.to_datetime(df_15min['Date and Time']) # 2. 提前对两个数据集按时间排序(merge_asof要求必须排序) df_5min_sorted = df_5min.sort_values('Date and Time') df_15min_sorted = df_15min.sort_values('Date and Time') # 3. 用merge_asof匹配,direction='backward'表示找不晚于当前5分钟时间的最近15分钟点 merged_df = pd.merge_asof( df_5min_sorted, df_15min_sorted, on='Date and Time', direction='backward' # 可选值还有forward/nearest,按需选择 )
关键注意事项
- 一定要先把
Date and Time列转换成datetime类型,pandas的时间序列工具只认这个格式; - 如果你的15分钟数据是原始采样数据(不是已经聚合的平均值),记得先通过
resample('15T').mean()做聚合; merge_asof的direction参数可以灵活调整:backward匹配最近的过去点,forward匹配最近的未来点,nearest匹配距离最近的点。
内容的提问来源于stack exchange,提问作者Yasin Khan
相关产品推荐
相关产品推荐

