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

xarray中time.hour分组的时间区间起止范围如何界定?

xarray groupby("time.hour")的小时划分规则说明
  • 你用ds_all.groupby("time.hour").mean()计算得到的标签为1的小时均值,对应的是所有时间戳小时字段值为1的采样点,也就是时间落在01:00:00到01:59:59区间内的数据,对应你举例里的01:00-02:00时段,既不是前一小时的累计段,也不是以半点为中心的滑动段。

底层逻辑

groupby("time.hour")本质是调用时间坐标对应DatetimeIndex的.hour属性,直接提取每个时间戳自带的整数小时分量做分组,不会做任何自动的时间窗偏移、中心对齐操作,分组标签和时间戳本身的小时位完全一一对应。
对你的1分钟采样数据集来说:

  • 标签0对应00:00、00:01……00:59共60个采样点
  • 标签1对应01:00、01:01……01:59共60个采样点
  • 以此类推,标签23对应23:00到23:59的60个采样点

自行验证方法

你可以构造一段短序列测试,结果会非常明确:

import xarray as xr
import pandas as pd
import numpy as np

# 构造2小时跨度、1分钟间隔的测试序列
test_times = pd.date_range("2024-01-01 00:00", "2024-01-01 02:00", freq="1min")
ds_test = xr.Dataset(
    {"val": ("time", np.arange(len(test_times)))},
    coords={"time": test_times}
)
test_mean = ds_test.groupby("time.hour").mean()
print(test_mean)

运行后你会看到:

  • hour=0的均值为29.5,正好是00:00-00:59共60个点(索引0到59)的算术平均
  • hour=1的均值为89.5,正好是01:00-01:59共60个点(索引60到119)的算术平均

特殊需求调整提示

如果你实际需要的是其他划分规则,比如把00:30-01:30的均值标记为1点、把00:00-01:00的统计值标记为1点,不能直接用time.hour分组:

  • 要做中心窗统计的话,先把时间坐标整体偏移30分钟再做hour分组
  • 要调整统计区间的标签位置,优先用resample方法的label、closed参数自定义区间闭合规则和标签位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:36:42