有什么简单的方法可以用 xarray 计算季节性平均值吗?

Is there any easy way to compute seasonal mean with xarray?

很多月度 NetCDF 文件包含许多年中的所有月份(例如,从 1948 年 1 月到 2018 年 12 月)。

如何使用Xarray方便的计算每年的季节平均值?

examples使用GroupBy计算季节平均值,但似乎将跨越多年的所有月份分为4组,无法给出每年的季节平均值。

听起来您正在寻找 resample 类型的操作。使用您链接到的文档示例中的 get_dpm 函数,我认为类似以下的内容应该有效:

month_length = xr.DataArray(
    get_dpm(ds.time.to_index(), calendar='standard'),
    coords=[ds.time],
    name='month_length'
)
result = ((ds * month_length).resample(time='QS-DEC').sum() / 
          month_length.resample(time='QS-DEC').sum())

使用 'QS-DEC' 频率会将数据分成连续的三个月时间段,固定在 12 月 1 日。

如果您的数据有缺失值,您需要修改此加权平均运算以解决该问题(即我们需要在对分母求和之前屏蔽 month_length):

result = (ds * month_length).resample(time='QS-DEC').sum() / 
          month_length.where(ds.notnull()).resample(time='QS-DEC').sum())