Skip to content

Commit

Permalink
BUG: Fix joining overlapping IntervalIndex objects (pandas-devGH-45661)…
Browse files Browse the repository at this point in the history
  • Loading branch information
johannes-mueller authored and yehoshuadimarsky committed Jul 13, 2022
1 parent 827591f commit 24d18ea
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 2 deletions.
1 change: 1 addition & 0 deletions doc/source/whatsnew/v1.4.1.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Fixed regressions
- Regression in :func:`.assert_frame_equal` not respecting ``check_flags=False`` (:issue:`45554`)
- Regression in :meth:`Series.fillna` with ``downcast=False`` incorrectly downcasting ``object`` dtype (:issue:`45603`)
- Regression in :meth:`DataFrame.loc.__setitem__` losing :class:`Index` name if :class:`DataFrame` was empty before (:issue:`45621`)
- Regression in :func:`join` with overlapping :class:`IntervalIndex` raising an ``InvalidIndexError`` (:issue:`45661`)
-

.. ---------------------------------------------------------------------------
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/indexes/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -4587,11 +4587,11 @@ def _join_via_get_indexer(
if join_index is self:
lindexer = None
else:
lindexer = self.get_indexer(join_index)
lindexer = self.get_indexer_for(join_index)
if join_index is other:
rindexer = None
else:
rindexer = other.get_indexer(join_index)
rindexer = other.get_indexer_for(join_index)
return join_index, lindexer, rindexer

@final
Expand Down
44 changes: 44 additions & 0 deletions pandas/tests/indexes/interval/test_join.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import pytest

from pandas import (
IntervalIndex,
MultiIndex,
RangeIndex,
)
import pandas._testing as tm


@pytest.fixture
def range_index():
return RangeIndex(3, name="range_index")


@pytest.fixture
def interval_index():
return IntervalIndex.from_tuples(
[(0.0, 1.0), (1.0, 2.0), (1.5, 2.5)], name="interval_index"
)


def test_join_overlapping_in_mi_to_same_intervalindex(range_index, interval_index):
# GH-45661
multi_index = MultiIndex.from_product([interval_index, range_index])
result = multi_index.join(interval_index)

tm.assert_index_equal(result, multi_index)


def test_join_overlapping_to_multiindex_with_same_interval(range_index, interval_index):
# GH-45661
multi_index = MultiIndex.from_product([interval_index, range_index])
result = interval_index.join(multi_index)

tm.assert_index_equal(result, multi_index)


def test_join_overlapping_interval_to_another_intervalindex(interval_index):
# GH-45661
flipped_interval_index = interval_index[::-1]
result = interval_index.join(flipped_interval_index)

tm.assert_index_equal(result, interval_index)

0 comments on commit 24d18ea

Please sign in to comment.