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

基于10分钟时间序列生成15分钟重采样DataFrame及整点校验方法

时间序列重采样:10分钟转15分钟按规则填充

问题背景

原始10分钟间隔时间序列数据:

df.index             value
2019-02-28 00:00:00  101
2019-02-28 00:10:00  97
2019-02-28 00:20:00  97
2019-02-28 00:30:00  96
2019-02-28 00:40:00  110
2019-02-28 00:50:00  117
2019-02-28 01:00:00  121
2019-02-28 01:10:00  114
2019-02-28 01:20:00  112
2019-02-28 01:30:00  103
2019-02-28 01:40:00  104
2019-02-28 01:50:00  105
2019-02-28 02:00:00  106
2019-02-28 02:10:00  104
2019-02-28 02:20:00  103
2019-02-28 02:30:00  97
2019-02-28 02:40:00  101
2019-02-28 02:50:00  103
2019-02-28 03:00:00  102
2019-02-28 03:10:00  101

核心需求:

  • 生成15分钟间隔的新DataFrame
  • 填充规则:
    • 整点(00分)和30分时刻:直接取用原数据对应值
    • 15分时刻:取原数据10分和20分的均值
    • 45分时刻:取原数据40分和50分的均值
  • 前置校验:确认原DataFrame是否从整点开始

报错原因分析

你尝试的代码中,range(0,len(df_15+1),6)一行存在两个关键问题:

  1. DatetimeArray操作错误:df_15是由时间序列转换的DataFrame,直接对其做+1属于整数与DatetimeArray的直接加减,这是Pandas已废弃的操作,因此抛出TypeError。
  2. 循环逻辑错误:每小时的15分钟间隔数据有4个时间点,对应原数据6个10分钟点,按步长6循环不符合数据对应关系。

解决方案代码

import pandas as pd

# 构造原始数据(若已有df可跳过此部分)
data = {
    'value': [101,97,97,96,110,117,121,114,112,103,104,105,106,104,103,97,101,103,102,101]
}
index = pd.date_range('2019-02-28 00:00:00', periods=20, freq='10T')
df = pd.DataFrame(data, index=index)

# 校验原始数据是否从整点开始
if df.index[0].minute != 0:
    raise ValueError("原始数据未从整点开始,请检查数据起始时间")

# 生成15分钟间隔的目标时间索引
target_index = pd.date_range(start=df.index[0], end=df.index[-1], freq='15T')
df_15 = pd.DataFrame(index=target_index, columns=['value'])

# 按规则填充每个时间点的值
for dt in target_index:
    minute = dt.minute
    if minute in (0, 30):
        # 整点/30分直接取原数据
        df_15.loc[dt, 'value'] = df.loc[dt, 'value']
    elif minute == 15:
        # 15分取10分和20分的均值
        t10 = dt - pd.Timedelta(minutes=5)
        t20 = dt + pd.Timedelta(minutes=5)
        df_15.loc[dt, 'value'] = (df.loc[t10, 'value'] + df.loc[t20, 'value']) / 2
    elif minute == 45:
        # 45分取40分和50分的均值
        t40 = dt - pd.Timedelta(minutes=5)
        t50 = dt + pd.Timedelta(minutes=5)
        df_15.loc[dt, 'value'] = (df.loc[t40, 'value'] + df.loc[t50, 'value']) / 2

print(df_15)

运行结果

value
2019-02-28 00:00:00  101.0
2019-02-28 00:15:00   97.0
2019-02-28 00:30:00   96.0
2019-02-28 00:45:00  113.5
2019-02-28 01:00:00  121.0
2019-02-28 01:15:00  113.0
2019-02-28 01:30:00  103.0
2019-02-28 01:45:00  104.5
2019-02-28 02:00:00  106.0
2019-02-28 02:15:00  103.5
2019-02-28 02:30:00   97.0
2019-02-28 02:45:00  102.0
2019-02-28 03:00:00  102.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:55:18