2016-11-16 82 views
1

我正在嘗試向xarray教程數據集添加霜天數。擴展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(「維」,「時間」,如何=「平均」) air_month = air_day。 resample('1M','time',how ='mean')

因爲我的結果,我想在air_month有一個額外的變量,所有三個維度的平均值低於零的天數。

我非常天真的嘗試是......。像這樣

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

但是通過sum() ing,我在這裏鬆開了時間維度。我被困在這裏,仍然沒有在我頭上包裹着xarray的概念。

感謝您的幫助!

+0

不知道這*的*方式是否做到這一點,但它似乎工作: 'air_day [ '霜'] = air_day.air <0' 'air_day.frost.groupby( 'time.month')。總和( '時間')。情節(COL = '月',col_wrap = 3)' – TomTom101

回答

0

你快到了! 和你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 ... 
+0

優秀, 謝謝!這是我想象的應該看起來像! – TomTom101