Skip to content

Commit 2250ddf

Browse files
authored
BUG: Fixed __join_multi always returning indexers (pandas-dev#34074) (pandas-dev#34075)
1 parent cca710b commit 2250ddf

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

doc/source/whatsnew/v1.1.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ MultiIndex
746746
# Common elements are now guaranteed to be ordered by the left side
747747
left.intersection(right, sort=False)
748748
749-
-
749+
- Bug when joining 2 Multi-indexes, without specifying level with different columns. Return-indexers parameter is ignored. (:issue:`34074`)
750750

751751
I/O
752752
^^^

pandas/core/indexes/base.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -3528,7 +3528,10 @@ def _join_multi(self, other, how, return_indexers=True):
35283528

35293529
multi_join_idx = multi_join_idx.remove_unused_levels()
35303530

3531-
return multi_join_idx, lidx, ridx
3531+
if return_indexers:
3532+
return multi_join_idx, lidx, ridx
3533+
else:
3534+
return multi_join_idx
35323535

35333536
jl = list(overlap)[0]
35343537

pandas/tests/indexes/multi/test_join.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,20 @@ def test_join_multi_wrong_order():
9696
midx1 = pd.MultiIndex.from_product([[1, 2], [3, 4]], names=["a", "b"])
9797
midx2 = pd.MultiIndex.from_product([[1, 2], [3, 4]], names=["b", "a"])
9898

99-
join_idx, lidx, ridx = midx1.join(midx2, return_indexers=False)
99+
join_idx, lidx, ridx = midx1.join(midx2, return_indexers=True)
100100

101101
exp_ridx = np.array([-1, -1, -1, -1], dtype=np.intp)
102102

103103
tm.assert_index_equal(midx1, join_idx)
104104
assert lidx is None
105105
tm.assert_numpy_array_equal(ridx, exp_ridx)
106+
107+
108+
def test_join_multi_return_indexers():
109+
# GH 34074
110+
111+
midx1 = pd.MultiIndex.from_product([[1, 2], [3, 4], [5, 6]], names=["a", "b", "c"])
112+
midx2 = pd.MultiIndex.from_product([[1, 2], [3, 4]], names=["a", "b"])
113+
114+
result = midx1.join(midx2, return_indexers=False)
115+
tm.assert_index_equal(result, midx1)

0 commit comments

Comments
 (0)