Skip to content

Commit ddff84a

Browse files
authored
REGR: MultiIndex.join not resorting levels of new index (#53102)
1 parent efc3d95 commit ddff84a

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

doc/source/whatsnew/v2.0.2.rst

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Fixed regressions
1515
~~~~~~~~~~~~~~~~~
1616
- Fixed regression in :meth:`DataFrame.loc` losing :class:`MultiIndex` name when enlarging object (:issue:`53053`)
1717
- Fixed regression in :meth:`DataFrame.to_string` printing a backslash at the end of the first row of data, instead of headers, when the DataFrame doesn't fit the line width (:issue:`53054`)
18+
- Fixed regression in :meth:`MultiIndex.join` returning levels in wrong order (:issue:`53093`)
19+
-
1820

1921
.. ---------------------------------------------------------------------------
2022
.. _whatsnew_202.bug_fixes:

pandas/core/indexes/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4908,7 +4908,7 @@ def _wrap_joined_index(
49084908
mask = lidx == -1
49094909
join_idx = self.take(lidx)
49104910
right = other.take(ridx)
4911-
join_index = join_idx.putmask(mask, right)
4911+
join_index = join_idx.putmask(mask, right)._sort_levels_monotonic()
49124912
return join_index.set_names(name) # type: ignore[return-value]
49134913
else:
49144914
name = get_op_result_name(self, other)

pandas/tests/indexes/multi/test_join.py

+12
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,15 @@ def test_join_dtypes_all_nan(any_numeric_ea_dtype):
257257
]
258258
)
259259
tm.assert_index_equal(result, expected)
260+
261+
262+
def test_join_index_levels():
263+
# GH#53093
264+
midx = midx = MultiIndex.from_tuples([("a", "2019-02-01"), ("a", "2019-02-01")])
265+
midx2 = MultiIndex.from_tuples([("a", "2019-01-31")])
266+
result = midx.join(midx2, how="outer")
267+
expected = MultiIndex.from_tuples(
268+
[("a", "2019-01-31"), ("a", "2019-02-01"), ("a", "2019-02-01")]
269+
)
270+
tm.assert_index_equal(result.levels[1], expected.levels[1])
271+
tm.assert_index_equal(result, expected)

0 commit comments

Comments
 (0)