Equivalent to Pandas boolean indexing for xarray?

180 views Asked by At

I have an xarray dataset that I would like to index using boolean indexing as I would with Pandas. For example, I have a pandas dataframe:

A B C
5 1 0 
4 1 0
3 5 0
4 3 0
5 2 0

And I want only rows where the value in B is greater than 2, like this:

df = df[df['B'] > 2]

would give

A B C
3 5 0
4 3 0

How could I do the same operation in xarray for an xarray dataset?

2

There are 2 answers

0
Amin S On BEST ANSWER

https://docs.xarray.dev/en/stable/user-guide/indexing.html#masking-with-where

i think you are looking for this

da.where(df.B > 2,drop=True) #da as a DataArray object

0
Michael Delgado On

If you’re looking to subset the data along axes based on a Boolean condition on one of the coordinates, you can do this with .sel:

ds.sel(x=(ds.x > 5))

You can similarly select along one or more axes after a reduction operation returns Boolean data indexed by coordinates on the array:

ds.sel(x=(ds.v > 5).any(dim="y"))

To subset the data using a multidimensional mask, use .where. Note however that xarray cannot drop arbitrary points from the middle of an array, you may end up with masked values (nans) still appearing in the result.