Dataset.to_stacked_array(new_dim, sample_dims, variable_dim='variable', name=None)

Combine variables of differing dimensionality into a DataArray without broadcasting.

This method is similar to Dataset.to_array but does not broadcast the variables.


Name of the new stacked coordinate


Dimensions that will not be stacked. Each array in the dataset must share these dimensions. For machine learning applications, these define the dimensions over which samples are drawn.

variable_dimstr, optional

Name of the level in the stacked coordinate which corresponds to the variables.

namestr, optional

Name of the new data array.


DataArray with the specified dimensions and data variables stacked together. The stacked coordinate is named new_dim and represented by a MultiIndex object with a level containing the data variable names. The name of this level is controlled using the variable_dim argument.


>>> data = Dataset(
...     data_vars={'a': (('x', 'y'), [[0, 1, 2], [3, 4, 5]]),
...                'b': ('x', [6, 7])},
...     coords={'y': ['u', 'v', 'w']}
... )
>>> data
Dimensions:  (x: 2, y: 3)
* y        (y) <U1 'u' 'v' 'w'
Dimensions without coordinates: x
Data variables:
    a        (x, y) int64 0 1 2 3 4 5
    b        (x) int64 6 7
>>> data.to_stacked_array("z", sample_dims=['x'])
<xarray.DataArray (x: 2, z: 4)>
array([[0, 1, 2, 6],
    [3, 4, 5, 7]])
* z         (z) MultiIndex
- variable  (z) object 'a' 'a' 'a' 'b'
- y         (z) object 'u' 'v' 'w' nan
Dimensions without coordinates: x