🍾 Xarray is now 10 years old! 🎉

xarray.DataArray.stack

xarray.DataArray.stack#

DataArray.stack(dimensions=None, create_index=True, index_cls=<class 'xarray.core.indexes.PandasMultiIndex'>, **dimensions_kwargs)[source]#

Stack any number of existing dimensions into a single new dimension.

New dimensions will be added at the end, and the corresponding coordinate variables will be combined into a MultiIndex.

Parameters:
  • dimensions (mapping of Hashable to sequence of Hashable) – Mapping of the form new_name=(dim1, dim2, …). Names of new dimensions, and the existing dimensions that they replace. An ellipsis () will be replaced by all unlisted dimensions. Passing a list containing an ellipsis (stacked_dim=[…]) will stack over all dimensions.

  • create_index (bool or None, default: True) – If True, create a multi-index for each of the stacked dimensions. If False, don’t create any index. If None, create a multi-index only if exactly one single (1-d) coordinate index is found for every dimension to stack.

  • index_cls (class, optional) – Can be used to pass a custom multi-index type. Must be an Xarray index that implements .stack(). By default, a pandas multi-index wrapper is used.

  • **dimensions_kwargs – The keyword arguments form of dimensions. One of dimensions or dimensions_kwargs must be provided.

Returns:

stacked (DataArray) – DataArray with stacked data.

Examples

>>> arr = xr.DataArray(
...     np.arange(6).reshape(2, 3),
...     coords=[("x", ["a", "b"]), ("y", [0, 1, 2])],
... )
>>> arr
<xarray.DataArray (x: 2, y: 3)> Size: 48B
array([[0, 1, 2],
       [3, 4, 5]])
Coordinates:
  * x        (x) <U1 8B 'a' 'b'
  * y        (y) int64 24B 0 1 2
>>> stacked = arr.stack(z=("x", "y"))
>>> stacked.indexes["z"]
MultiIndex([('a', 0),
            ('a', 1),
            ('a', 2),
            ('b', 0),
            ('b', 1),
            ('b', 2)],
           name='z')