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

如何使用resample函数生成每日10:00至次日9:00的23小时平均数据

解决方案

针对你的需求,这里提供两种无需删除数据的代码实现,核心是通过时间偏移或自定义分组来对齐你需要的23小时窗口(每日10:00至次日9:00):

前提准备

确保你的时间序列数据索引是datetime64类型:

import pandas as pd

# 转换索引为datetime(如果还未转换)
Data_s.index = pd.to_datetime(Data_s.index)

方法一:时间偏移+按天重采样

通过偏移时间将目标窗口对齐到自然日,再重采样计算均值:

# 将所有时间向后偏移10小时,原10:00变为00:00,次日9:00变为前一日23:00
offset_data = Data_s.tshift(-10, freq='H')

# 按自然日重采样计算均值,此时每个日均值对应原数据的10:00-次日9:00窗口
daily_avg = offset_data.resample('D').mean()

# 将结果索引偏移回10小时,让索引对应窗口的起始时间(如2022-03-11 10:00)
daily_avg.index = daily_avg.index.shift(10, freq='H')

# 过滤超出原数据范围的无效窗口(比如最后一个窗口若超出4月11日则剔除)
daily_avg = daily_avg.loc[daily_avg.index <= Data_s.index.max() - pd.Timedelta(hours=23)]

方法二:自定义分组键

通过调整时间生成分组键,直接按目标窗口分组计算:

# 生成分组键:每个时间减去10小时后取日期,这样10:00-次日9:00的时间会被分到同一日期组
group_key = (Data_s.index - pd.Timedelta(hours=10)).date

# 按分组键计算均值
daily_avg = Data_s.groupby(group_key).mean()

# 将分组键转换为窗口起始时间(日期+10小时)
daily_avg.index = pd.to_datetime(daily_avg.index) + pd.Timedelta(hours=10)

验证结果

可以手动计算某一窗口的均值来验证代码正确性:

# 验证2022-03-11 10:00至2022-03-12 09:00的均值
mask = (Data_s.index >= '2022-03-11 10:00') & (Data_s.index < '2022-03-12 09:00')
manual_avg = Data_s.loc[mask].mean()

print("代码计算结果:", daily_avg.loc['2022-03-11 10:00'])
print("手动计算结果:", manual_avg)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:20:22