html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/issues/3659#issuecomment-570068215,https://api.github.com/repos/pydata/xarray/issues/3659,570068215,MDEyOklzc3VlQ29tbWVudDU3MDA2ODIxNQ==,14136435,2020-01-01T17:09:23Z,2020-01-05T10:58:18Z,CONTRIBUTOR,"The solution that makes sense to me is:
Multiindex level name conflicts should only be checked for coordinates, not data variables.
But I've only spent a few hours digging through the codebase to try and understand this problem - I'm not quite sure what the implications would be.
Here is another place where it feels like it makes more sense to only check the MultiIndex level names of coords:
```python
>>> da = xr.DataArray([0, 1], dims=[""location""], coords={""lat"": (""location"", [10, 11]), ""lon"": (""location"", [20, 21])}).set_index(location=[""lat"", ""lon""])
>>> location = da[""location""]
# you cannot directly make a dataset with `location` as a data variable
>>> xr.Dataset({""data"": location})
Traceback (most recent call last):
File """", line 1, in
File ""/home/harry/code/xarray/xarray/core/dataset.py"", line 541, in __init__
variables, coord_names, dims, indexes = merge_data_and_coords(
File ""/home/harry/code/xarray/xarray/core/merge.py"", line 466, in merge_data_and_coords
return merge_core(
File ""/home/harry/code/xarray/xarray/core/merge.py"", line 556, in merge_core
assert_unique_multiindex_level_names(variables)
File ""/home/harry/code/xarray/xarray/core/variable.py"", line 2363, in assert_unique_multiindex_level_names
raise ValueError(""conflicting MultiIndex level name(s):\n%s"" % conflict_str)
ValueError: conflicting MultiIndex level name(s):
'lat' (location), 'lat' (data)
'lon' (location), 'lon' (data)
# but if you go a round-about way, you can exploit that assign_coords only checks
# the multiindex names of coordinates, not data variables
```python
>>> ds = xr.Dataset({""data"": xr.DataArray(data=location.variable._data, dims=[""location""])})
>>> ds = ds.assign_coords({""location"": location})
>>> ds
Dimensions: (location: 2)
Coordinates:
* location (location) MultiIndex
- lat (location) int64 10 11
- lon (location) int64 20 21
Data variables:
data (location) object (10, 20) (11, 21)
>>> ds[""data""].variable._data
PandasIndexAdapter(array=MultiIndex([(10, 20),
(11, 21)],
names=['lat', 'lon']), dtype=dtype('O'))
```
If making `variable.assert_unique_multiindex_level_names` only check coords is the way to go, I'm keen + happy to try putting together a pull request for this.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,544375718