扩展 xarray 数据集

Extending an xarray Dataset

我正在尝试将霜冻天数添加到 xarray 教程数据集中。

airtemps = xr.tutorial.load_dataset('air_temperature')
# The set spans more than a year, let's take only one
airtemps = airtemps.sel(time=slice('2013-01-01', '2013-12-31'))
airtemps['air'] = airtemps.air - 273.15

数据在时间方面非常高分辨率,因此为了更容易处理,我对它们重新采样 air_day = airtemps.resample('1D', 'time', how='mean') air_month = air_day.resample('1M', 'time', how='mean')

因此,我想在 air_month 中添加一个附加变量,其中包含所有三个维度的平均值低于零的天数。

我非常幼稚的尝试是某事。像这样

air_month['frost'] = sum(air_day.air < 0)

然而,通过 sum()ing,我在这里放宽了时间维度。我被困在这里,仍然没有将 xarray 概念包裹在我的脑海中。

感谢帮助!

你快到了! 你的 groupby 非常相似(并且在某些方面更好,因为 xarray 的重采样还不是 groupby)

In [24]: (air_day.air < 0).resample('M', dim='time', how='sum')
Out[24]:
<xarray.DataArray 'air' (time: 12, lat: 25, lon: 53)>
array([[[31, 31, 31, ..., 31, 31, 31],
        [31, 31, 31, ..., 31, 31, 31],
        [31, 31, 31, ..., 31, 31, 31],
        ...,
        [ 0,  0,  0, ...,  0,  0,  0],
        [ 0,  0,  0, ...,  0,  0,  0],
        [ 0,  0,  0, ...,  0,  0,  0]]])
Coordinates:
  * lat      (lat) float32 75.0 72.5 70.0 67.5 65.0 62.5 60.0 57.5 55.0 52.5 ...
  * lon      (lon) float32 200.0 202.5 205.0 207.5 210.0 212.5 215.0 217.5 ...
  * time     (time) datetime64[ns] 2013-01-31 2013-02-28 2013-03-31 ...