xarray.Dataset.idxmax#

Dataset.idxmax(dim=None, *, skipna=None, fill_value=<NA>, keep_attrs=None)[source]#

Return the coordinate label of the maximum value along a dimension.

Returns a new Dataset named after the dimension with the values of the coordinate labels along that dimension corresponding to maximum values along that dimension.

In comparison to argmax(), this returns the coordinate label while argmax() returns the index.

Parameters:
  • dim (str, optional) – Dimension over which to apply idxmax. This is optional for 1D variables, but required for variables with 2 or more dimensions.

  • skipna (bool or None, optional) – If True, skip missing values (as marked by NaN). By default, only skips missing values for float, complex, and object dtypes; other dtypes either do not have a sentinel missing value (int) or skipna=True has not been implemented (datetime64 or timedelta64). If False, NaN is treated as the maximum like in numpy.argmax(), so the label of the first NaN is returned.

  • fill_value (Any, default: NaN) – Value to be filled in case all of the values along a dimension are null. By default this is NaN. The fill value and result are automatically converted to a compatible dtype if possible. Ignored if skipna is False.

  • keep_attrs (bool or None, optional) – If True, the attributes (attrs) of the coordinate are copied to the result. If False, the result is returned without attributes.

Returns:

reduced (Dataset) – New Dataset object with idxmax applied to its data and the indicated dimension removed.

Examples

>>> array1 = xr.DataArray(
...     [0, 2, 1, 0, -2], dims="x", coords={"x": ["a", "b", "c", "d", "e"]}
... )
>>> array2 = xr.DataArray(
...     [
...         [2.0, 1.0, 2.0, 0.0, -2.0],
...         [-4.0, np.nan, 2.0, np.nan, -2.0],
...         [np.nan, np.nan, 1.0, np.nan, np.nan],
...     ],
...     dims=["y", "x"],
...     coords={"y": [-1, 0, 1], "x": ["a", "b", "c", "d", "e"]},
... )
>>> ds = xr.Dataset({"int": array1, "float": array2})
>>> ds.max(dim="x")
<xarray.Dataset> Size: 56B
Dimensions:  (y: 3)
Coordinates:
  * y        (y) int64 24B -1 0 1
Data variables:
    int      int64 8B 2
    float    (y) float64 24B 2.0 2.0 1.0
>>> ds.argmax(dim="x")
<xarray.Dataset> Size: 56B
Dimensions:  (y: 3)
Coordinates:
  * y        (y) int64 24B -1 0 1
Data variables:
    int      int64 8B 1
    float    (y) int64 24B 0 2 2
>>> ds.idxmax(dim="x")
<xarray.Dataset> Size: 40B
Dimensions:  (y: 3)
Coordinates:
  * y        (y) int64 24B -1 0 1
Data variables:
    int      <U1 4B 'b'
    float    (y) <U1 12B 'a' 'c' 'c'