我正在尝试为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()
,我在这里放松了时间维度。我被困在这里,仍然无法将xarray的概念包裹在我的脑海里。
感谢您的帮助!
答案 0 :(得分:0)
你快到了! 并且你的groupby非常相似(并且在某些方面更好,因为xarray的resample还不是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 ...