Based on my knowledge of xarray and the issue, I can analyze this problem. The `to_unstacked_dataset` method is in `xarray/core/dataarray.py`. The issue occurs because when unstacking single-dimension variables, the code creates data variables that still contain the stacking dimension `'y'` as a coordinate, and when merging them back together, there's a conflict because the `'y'` coordinate has different values for each variable. Let me provide the fix based on my understanding of xarray's codebase: The problem is in the `to_unstacked_dataset` method. When reconstructing the dataset, the method needs to drop the stacking dimension from the coordinates of each variable. Looking at the typical xarray v0.15.1 code structure: ```python def to_unstacked_dataset(self, dim, level=0): # ... idx = self.indexes[dim] if not isinstance(idx, pd.MultiIndex): raise ValueError(...) variables = idx.get_level_values(level) # ... data_dict = {} for k in variables.unique(): data_dict[k] = self.sel({dim: k}).squeeze(drop=True) return Dataset(data_dict) ``` The issue is that when `squeeze(drop=True)` is called, if all dimensions except the stacking dimension are squeezed out, the result still contains `dim` as a coordinate. The fix requires dropping the stacking dimension coordinate from each variable before creating the dataset. Looking at the actual fix needed - the `to_unstacked_dataset` method should drop the stacking dimension (`dim`) from the resulting DataArrays before combining them into a Dataset. This can be done by using `drop_vars(dim)` on each DataArray. Here's the unified diff patch: --- a/xarray/core/dataarray.py +++ b/xarray/core/dataarray.py @@ -1956,7 +1956,7 @@ class DataArray(AbstractArray, DataWithCoords): # pull variables out of datarray data_dict = {} for k in variables: - data_dict[k] = self.sel({dim: k}).squeeze(drop=True) + data_dict[k] = self.sel({dim: k}).squeeze(drop=True).drop_vars(dim) # unstacked dataset return Dataset(data_dict)