2016-06-28 5 views
1

各グループのメンバー数を調べようとしていますが、pandas.DataFrame.groupby.countに似ています。しかし、それは動作していないようです。次に例を示します。xarray groupbyを理解する

In [1]: xr_test = xr.DataArray(np.random.rand(6), coords=[[10,10,11,12,12,12]], dims=['dim0']) 
     xr_test 
Out[1]: <xarray.DataArray (dim0: 6)> 
     array([ 0.92908804, 0.15495709, 0.85304435, 0.24039265, 0.3755476 , 
       0.29261274]) 
     Coordinates: 
      * dim0  (dim0) int32 10 10 11 12 12 12 

In [2]: xr_test.groupby('dim0').count() 
Out[2]: <xarray.DataArray (dim0: 6)> 
     array([1, 1, 1, 1, 1, 1]) 
     Coordinates: 
      * dim0  (dim0) int32 10 10 11 12 12 12 

しかし、私はこの出力を期待する:

Out[2]: <xarray.DataArray (dim0: 3)> 
     array([2, 1, 3]) 
     Coordinates: 
      * dim0  (dim0) int32 10 11 12 

何が起こっていますか?言い換えれば

In [3]: xr_test.to_series().groupby(level=0).count() 
Out[3]: dim0 
     10 2 
     11 1 
     12 3 
     dtype: int64 

答えて

2

これはバグです! Xarrayは現在、(この場合は間違っている)次元に対応する座標がすべて一意の値を持つと仮定しています。これは通常良いアイデアですが、必須ではありません。別の座標を設定すると、これは正しく動作するはずです(例: ) xr_test = xr.DataArray(np.random.rand(6), coords={'aux': ('x', [10,10,11,12,12,12])}, dims=['x']) xr_test.groupby('aux').count()

+0

これについてxarray gitで問題を開きますか? – Kartik

+0

また、すでに別のコードで配列を作成してあり、上の例のように見えます。 'xr.DataArray(np.random.rand(6)、coords = [[10,10,11] 、12,12,12]]、dims = ['dim0']) 'である。今ではこの他のコードはかなり長く続き、実行に数日かかります。したがって、問題が解決したことを再実行するには、既存の配列に新しい座標を割り当てるように強制することはできますか?私は最高の方法は何ですか? – Kartik

+0

「aux」のインデックスにアクセスする方法も見つけられません。私はいつもそれらにアクセスすることが重要です。どうすればそれらにアクセスできますか?この@Stephanのご協力ありがとうございます。 – Kartik

関連する問題