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

如何计算xarray数据集各自然小时均值并保留带日期的时间戳?

问题根源

ds.groupby("time.hour").mean()返回跨日期同小时聚合结果,是因为time.hour提取的是0-23的小时数值作为分组键,所有日期中小时数相同的样本会被归为同一组,最终只会输出24个聚合值,无法区分不同日期的同一小时。拆分数据集计算后丢失日期信息,本质也是分组时没有绑定完整的日期时间锚点导致的。

实现方案

直接使用xarray内置的时间重采样接口做1小时降采样,不需要手动拆分数据集,输出结果的时间维度会自动保留完整的年-月-日T时:分:秒格式的整点时间戳,和你需要的输出格式完全匹配。

核心代码

# 按自然小时聚合求均值,时间标签使用小时整点值
ds_hourly_mean = ds.resample(time="1H", label="left", closed="left").mean()

参数说明:

  • time="1H":指定重采样步长为1个自然小时
  • label="left":以每个小时区间的左边界(即整点时刻,如00:00-01:00区间对应2015-01-01T00:00:00)作为结果的时间坐标值
  • closed="left":区间左闭合,即每个整点时刻的观测值计入对应整点开始的小时段,符合自然小时的统计逻辑

缺失小时补全(可选)

如果原始数据存在整段小时级别的缺失,需要输出连续无缺口的小时时间序列(无观测的小时对应变量值为NaN),可以在重采样后补充时间轴重索引:

import pandas as pd
# 生成覆盖原始数据时间范围的完整小时序列,补全缺失时间点
full_hour_range = pd.date_range(
    start=ds.time.min().values.astype("datetime64[h]"),
    end=ds.time.max().values.astype("datetime64[h]"),
    freq="1H"
)
ds_hourly_mean = ds_hourly_mean.reindex(time=full_hour_range)
方法对比
  • groupby("time.hour"):分组键为0-23的整数,输出维度坐标为0-23的小时数,做跨日期同小时聚合
  • resample(time="1H"):分组键为每个时间点所属自然小时的完整时间锚点,输出维度坐标为带完整日期的整点时间戳,按单个自然小时独立聚合,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:06:23