2016-05-27 6 views
0

に私があるxarrayデータセットがあります。のpython xarray連結GROUPBY datetime64寸法

ds 
<xarray.Dataset>  
Dimensions: (lat: 360, lon: 720, time: 3652) 
Coordinates: 
    * lon  (lon) float32 -179.75 -179.25 -178.75 -178.25 -177.75 -177.25  ... 
    * lat  (lat) float32 89.75 89.25 88.75 88.25 87.75 87.25 86.75 86.25 ... 
* time  (time) datetime64[ns] 2010-01-01 2010-01-02 2010-01-03 ... 
Data variables: 
dis (time, lat, lon) float64 nan nan nan nan nan nan nan nan nan... 

がDIS変数内のNaNはあるが、全体の配列がNaNではありません。 ディメンション時間の長さは、10年間の日次データ(3652日)に対応します。

私がやりたいことは、毎月、各gridsquare(lat、lon)の10年のtimeseriesの月間平均を取得することです。 ので、出力データセットは次のようになります。

Dimensions: (lat: 360, lon: 720, time: 12) #<<< or 'months' 

私はほとんど私が欲しいものないことを見た1つのオプションは次のとおりです。

ds.dis.groupby('time.month').mean() 

これの出力はわずか12項目の配列ですが。すなわち、我々は緯度と経度の両方の次元を失う。私は理解

<xarray.DataArray 'dis' (month: 12)> 
array([ 368.26764123, 394.0543304 , 424.67056092, 476.94943773, 
    522.383195 , 516.37355647, 497.74700652, 472.46993274, 
    456.87268206, 402.44729131, 367.41928436, 362.6121917 ]) 
Coordinates: 
* month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12 

はおそらくdatetime64メソッドを使用してこれを行うための簡単な方法がありますが、私は彼らの完全な意味を理解するために苦労しています。

ああ、これを書いている間、私は実行して管理している:

与え
stacked = xr.concat([ds.dis[tlist[month,:],:,:].mean(dim='time',skipna=True) for month in range(0,12)],dim='month') 

<xarray.DataArray 'dis' (month: 12, lat: 360, lon: 720)> 

をしかし、他の多くのニシキヘビの方法は、コード使用しての最初の行に沿って、よりそこですグループバイ?

各サブアレイ内のすべてのディメンションを超える集約避けるのおかげ

答えて

2

は、あなたが明示的にディメンションのリストを提供する必要があります。

ds.dis.groupby('time.month').mean('time') 

(ある時点で我々はのために、このデフォルトの動作を行う意図groupby操作を使用することができますが、これは通常は望ましいものですが、現在のデフォルトの合計をすべてのディメンションでトリガーする方法が明確でないためです)。

+0

ありがとう - 'skipna = True '' – dreab