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

如何用xarray对两年逐小时NetCDF数据按月-小时维度求平均?

解决xarray分组计算月内逐小时平均值的问题

我来帮你搞定这个报错!你遇到的问题是因为xarray的groupby方法对多分组键的写法有特定要求,咱们一步步来修正:

错误原因分析

你之前的两种写法都不符合xarray的groupby规则:

  • 第一种groupby(['time.month', 'time.hour']):传入的是字符串列表,但xarray无法直接识别time.month这种属性访问式的字符串作为分组键,它需要的是实际的DataArray对象或者数据集里已有的变量/维度名称。
  • 第二种groupby('time.month', 'time.hour'):groupby的第一个参数是分组键,第二个参数是可选的配置参数(比如squeeze、restore_coord_dims等),不能直接传第二个分组键。

正确的写法

这里有两种简洁有效的方式来实现你的需求:

方式1:使用逗号分隔的字符串分组键

xarray支持在一个字符串里用逗号分隔多个分组键,直接用time.month和time.hour的属性访问语法即可:

import xarray as xr
ds = xr.open_mfdataset('ecmwf_usa_2015.nc')
# 按月份和小时分组,计算时间维度的平均值
monthly_hourly_mean = ds.groupby('time.month, time.hour').mean('time')

方式2:显式生成分组用的DataArray

如果你想更清晰地控制分组维度的名称,可以先把月份和小时提取成单独的变量,再分组:

import xarray as xr
ds = xr.open_mfdataset('ecmwf_usa_2015.nc')
# 新增month和hour变量
ds['month'] = ds.time.dt.month
ds['hour'] = ds.time.dt.hour
# 按新变量分组计算平均值
monthly_hourly_mean = ds.groupby(['month', 'hour']).mean('time')

结果说明

两种方式都会得到一个包含month(或time.month)和hour(或time.hour)维度的数据集,每个值对应所有年份中同一个月、同一个小时的平均,正好满足你“每月中一天内各小时的平均值”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:42:37