2016-08-09 18 views
0

xarray.Datasetdatasetがあるとします。私はnameという名前のディメンションを持っていますが(のすべてのDataArrayで共有されていますが、この質問では重要ではないと思います)、特定の名前のエントリを選択したいとします。私はこれを次のようにします。Python Xarray `Dataset.sel()`は一次元に沿って複数の値を選択します

dataset.sel(name="lucifer") 

しかし、私は今の名前「ルシファー」「ユダ」を含むサブデータセットを選択するとします。

dataset.sel(name=["lucifer", "judas"]) 

これは私が想像することができるパンダに最も近い構文なので、私は何かをしたいと思う。しかし、これは私にエラーを与える。

InvalidIndexError: Reindexing only valid with uniquely valued Index objects 

(ちなみに、私はXarrayから取得するすべての単一のエラーは、この正確なエラーのようだ、と私はXarrayは、より多くの有益なエラーを与える見て本当に幸せだろう。)だから私の質問は私がすることによって選択しないか、あります名前付きディメンションの複数の名前付き値名前付きの値には特定の順序がないので、スライスを使用できないとします。

+0

あなたは本当にユニークではないディメンションが必要ですか?私は、一般に、ユニークな次元のデータセットについて、それを推論する方がはるかに簡単であることを発見しました。ラベリングのための一意でないデータがある場合は、coordsを使用できます。 – Maximilian

+0

@Maximilian私は、非ユニークな次元の意味を理解していません。私が求めているのは、次元に沿って2つ(またはそれ以上)の一意の値を選択することだけです。次元自体もユニークです。 – Ray

+0

そのディメンションの値は一意ですか?もしそうであれば、あなたが書いたものはうまくいくはずです。完全な例を投稿できますか? – Maximilian

答えて

0

あなたは、あなたがユニークでないCOORDS上whereを使用することができ、あなたの寸法のためのユニークなインデックスを使用することができた場合:

In [11]: ds=xr.Dataset({'a': [1,2,3], 'b': ('a', [4,5,5])}) 
In [14]: ds.where(ds.b==5, drop=True) 
Out[14]: 
<xarray.Dataset> 
Dimensions: (a: 2) 
Coordinates: 
    * a  (a) int64 2 3 
Data variables: 
    b  (a) float64 5.0 5.0 
関連する問題