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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:13:04