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