在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
相关产品推荐
相关产品推荐

