🍾 Xarray is now 10 years old! 🎉

xarray.Dataset.where

Contents

xarray.Dataset.where#

Dataset.where(cond, other=<NA>, drop=False)[source]#

Filter elements from this object according to a condition.

Returns elements from ‘DataArray’, where ‘cond’ is True, otherwise fill in ‘other’.

This operation follows the normal broadcasting and alignment rules that xarray uses for binary arithmetic.

Parameters:
  • cond (DataArray, Dataset, or callable()) – Locations at which to preserve this object’s values. dtype must be bool. If a callable, the callable is passed this object, and the result is used as the value for cond.

  • other (scalar, DataArray, Dataset, or callable(), optional) – Value to use for locations in this object where cond is False. By default, these locations are filled with NA. If a callable, it must expect this object as its only parameter.

  • drop (bool, default: False) – If True, coordinate labels that only correspond to False values of the condition are dropped from the result.

Returns:

DataArray or Dataset – Same xarray type as caller, with dtype float64.

Examples

>>> a = xr.DataArray(np.arange(25).reshape(5, 5), dims=("x", "y"))
>>> a
<xarray.DataArray (x: 5, y: 5)> Size: 200B
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
Dimensions without coordinates: x, y
>>> a.where(a.x + a.y < 4)
<xarray.DataArray (x: 5, y: 5)> Size: 200B
array([[ 0.,  1.,  2.,  3., nan],
       [ 5.,  6.,  7., nan, nan],
       [10., 11., nan, nan, nan],
       [15., nan, nan, nan, nan],
       [nan, nan, nan, nan, nan]])
Dimensions without coordinates: x, y
>>> a.where(a.x + a.y < 5, -1)
<xarray.DataArray (x: 5, y: 5)> Size: 200B
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8, -1],
       [10, 11, 12, -1, -1],
       [15, 16, -1, -1, -1],
       [20, -1, -1, -1, -1]])
Dimensions without coordinates: x, y
>>> a.where(a.x + a.y < 4, drop=True)
<xarray.DataArray (x: 4, y: 4)> Size: 128B
array([[ 0.,  1.,  2.,  3.],
       [ 5.,  6.,  7., nan],
       [10., 11., nan, nan],
       [15., nan, nan, nan]])
Dimensions without coordinates: x, y
>>> a.where(lambda x: x.x + x.y < 4, lambda x: -x)
<xarray.DataArray (x: 5, y: 5)> Size: 200B
array([[  0,   1,   2,   3,  -4],
       [  5,   6,   7,  -8,  -9],
       [ 10,  11, -12, -13, -14],
       [ 15, -16, -17, -18, -19],
       [-20, -21, -22, -23, -24]])
Dimensions without coordinates: x, y
>>> a.where(a.x + a.y < 4, drop=True)
<xarray.DataArray (x: 4, y: 4)> Size: 128B
array([[ 0.,  1.,  2.,  3.],
       [ 5.,  6.,  7., nan],
       [10., 11., nan, nan],
       [15., nan, nan, nan]])
Dimensions without coordinates: x, y

See also

numpy.where

corresponding numpy function

where

equivalent function