Skip to content

Commit 6383a0b

Browse files
committed
Convert Variable to IndexVariable when renamed to existing dim name
1 parent 484d1ce commit 6383a0b

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

xarray/core/dataset.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2782,6 +2782,17 @@ def _rename_all(self, name_dict, dims_dict):
27822782
variables, coord_names = self._rename_vars(name_dict, dims_dict)
27832783
dims = self._rename_dims(dims_dict)
27842784
indexes = self._rename_indexes(name_dict, dims.keys())
2785+
2786+
# Variable could be renamed to an existing dimension name
2787+
# in this case, convert to IndexVariable and set indexes
2788+
# GH4107
2789+
for name in coord_names:
2790+
indexvar = variables.pop(name).to_index_variable()
2791+
variables[name] = indexvar
2792+
if indexes is None:
2793+
indexes = dict()
2794+
indexes[name] = indexvar.to_index()
2795+
27852796
return variables, coord_names, dims, indexes
27862797

27872798
def rename(

xarray/tests/test_dataset.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2558,6 +2558,14 @@ def test_rename_vars(self):
25582558
with pytest.raises(ValueError):
25592559
original.rename_vars(names_dict_bad)
25602560

2561+
def test_rename_to_dim_name(self):
2562+
# regression test for GH4107
2563+
coord_1 = xr.DataArray([1, 2], dims=["coord_1"], attrs={"attrs": True})
2564+
ds = xr.Dataset()
2565+
ds["a"] = xr.DataArray([1, 0], [coord_1])
2566+
obj = ds.reset_index("coord_1").rename({"coord_1_": "coord_1"})
2567+
assert_equal(ds, obj)
2568+
25612569
def test_rename_multiindex(self):
25622570
mindex = pd.MultiIndex.from_tuples(
25632571
[([1, 2]), ([3, 4])], names=["level0", "level1"]

0 commit comments

Comments
 (0)