2016-11-16 9 views
1

Ich versuche, dem Xarray-Tutorial-Dataset eine Anzahl von Frosttagen hinzuzufügen.Erweitern eines Xarray-Datasets

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 

Die Daten sind recht hoch auflösende zeitweise so für eine einfachere Handhabung I resamplen sie air_day = airtemps.resample ('1D', 'Zeit', wie = 'mean') air_month = air_day. resample ('1M', 'time', wie = 'mean')

Als Ergebnis möchte ich eine zusätzliche Variable in air_month mit einer Zählung der Tage mit Durchschnitten unter Null, in allen drei Dimensionen haben .

Mein sehr naiv Versuch wäre etw. wie diese

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

jedoch durch sum() ing, verliere ich die Zeitdimension hier. Ich stecke hier fest, habe noch nicht die Xarray-Konzepte um meinen Kopf gewickelt.

Vielen Dank für Ihre Hilfe!

+0

Nicht sicher, ob dies * die * Art und Weise, es zu tun, aber es scheint zu funktionieren: 'air_day ['frost'] = air_day.air <0' 'air_day.frost.groupby ('time.month'). summe ('time'). plot (col = 'monat', col_wrap = 3)' – TomTom101

Antwort

0

Sie waren fast da! Und Ihre groupby ist sehr ähnlich (und in gewisser Weise schöner resample gegeben xarray der ist noch nicht ein 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

Ausgezeichnet , Danke! So habe ich mir das vorgestellt! – TomTom101