Skip to content

Commit 44f0a9b

Browse files
Backport PR #53102 on branch 2.0.x (REGR: MultiIndex.join not resorting levels of new index) (#53113)
Backport PR #53102: REGR: MultiIndex.join not resorting levels of new index Co-authored-by: Patrick Hoefler <[email protected]>
1 parent 70d80d8 commit 44f0a9b

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
@@ -4877,7 +4877,7 @@ def _wrap_joined_index(
48774877
mask = lidx == -1
48784878
join_idx = self.take(lidx)
48794879
right = other.take(ridx)
4880-
join_index = join_idx.putmask(mask, right)
4880+
join_index = join_idx.putmask(mask, right)._sort_levels_monotonic()
48814881
return join_index.set_names(name) # type: ignore[return-value]
48824882
else:
48834883
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)