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

在Pandas中将规则时间序列重采样为不规则时间序列

按不规则时间区间计算时间序列均值

针对规则时间序列按预定义不规则区间计算均值的需求,这里提供两种实用方案,无需依赖仅适用于规则区间的resample:

方法1:用pd.cut分组计算

通过将原时间序列的索引映射到对应不规则区间,再分组求均值,代码简洁高效:

import numpy as np
import pandas as pd
import datetime as dt

# 原规则时间序列数据
reg_data = pd.Series(
    np.arange(25),
    index=pd.date_range(start='2018-01-01', end='2018-01-02', freq='H')
)
# 定义不规则区间的起止时间
new_start_times = [
    dt.datetime(2018,1,1,2,5,12),
    dt.datetime(2018,1,1,6,0,0),
    dt.datetime(2018,1,1,12,7,58)
]
new_end_times = [
    dt.datetime(2018,1,1,3,7,28),
    dt.datetime(2018,1,1,7,0,0),
    dt.datetime(2018,1,1,19,55,22)
]

# 生成区间标识标签
interval_labels = [f"{start} → {end}" for start, end in zip(new_start_times, new_end_times)]
# 将原时间索引分配到对应区间
groups = pd.cut(reg_data.index, bins=[*new_start_times, new_end_times[-1]], labels=interval_labels, include_lowest=True)
# 分组计算均值
mean_by_interval = reg_data.groupby(groups).mean()

print(mean_by_interval)

关键说明:

  • pd.cut自动匹配每个时间点到所属区间,include_lowest=True确保第一个区间包含起始边界
  • 区间标签可自定义,方便后续识别区间范围

方法2:遍历区间逐个筛选计算

如果需要灵活控制筛选逻辑(比如处理区间边界、空数据),可直接遍历区间筛选数据后计算:

# 初始化结果存储容器
mean_results = pd.Series(dtype='float64')

for start, end in zip(new_start_times, new_end_times):
    # 筛选当前区间内的数据(可根据需求调整闭/半开区间逻辑)
    mask = (reg_data.index >= start) & (reg_data.index <= end)
    interval_data = reg_data[mask]
    # 计算均值并存储,用区间起止时间作为索引
    mean_results[f"{start} → {end}"] = interval_data.mean()

print(mean_results)

关键说明:

  • 可灵活修改筛选条件,比如排除区间端点、处理无数据区间的NaN结果
  • 适合需要对单个区间做额外处理的场景

内容的提问来源于stack exchange,提问作者Aston Villarreal Madrid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:10:26