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

