Skip to content

Commit 9c23545

Browse files
jschendelNico Cernek
authored and
Nico Cernek
committed
BUG: Fix RangeIndex.get_indexer for decreasing RangeIndex (pandas-dev#28680)
1 parent 3f67cf6 commit 9c23545

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

doc/source/whatsnew/v0.25.2.rst

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Indexing
5050
^^^^^^^^
5151

5252
- Fix regression in :meth:`DataFrame.reindex` not following ``limit`` argument (:issue:`28631`).
53+
- Fix regression in :meth:`RangeIndex.get_indexer` for decreasing :class:`RangeIndex` where target values may be improperly identified as missing/present (:issue:`28678`)
5354
-
5455
-
5556

pandas/core/indexes/range.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -388,8 +388,9 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None):
388388
if self.step > 0:
389389
start, stop, step = self.start, self.stop, self.step
390390
else:
391-
# Work on reversed range for simplicity:
392-
start, stop, step = (self.stop - self.step, self.start + 1, -self.step)
391+
# GH 28678: work on reversed range for simplicity
392+
reverse = self._range[::-1]
393+
start, stop, step = reverse.start, reverse.stop, reverse.step
393394

394395
target_array = np.asarray(target)
395396
if not (is_integer_dtype(target_array) and target_array.ndim == 1):

pandas/tests/indexes/test_range.py

+8
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,14 @@ def test_get_indexer_limit(self):
424424
expected = np.array([0, 1, 2, 3, 3, -1], dtype=np.intp)
425425
tm.assert_numpy_array_equal(result, expected)
426426

427+
@pytest.mark.parametrize("stop", [0, -1, -2])
428+
def test_get_indexer_decreasing(self, stop):
429+
# GH 28678
430+
index = RangeIndex(7, stop, -3)
431+
result = index.get_indexer(range(9))
432+
expected = np.array([-1, 2, -1, -1, 1, -1, -1, 0, -1], dtype=np.intp)
433+
tm.assert_numpy_array_equal(result, expected)
434+
427435
def test_join_outer(self):
428436
# join with Int64Index
429437
other = Int64Index(np.arange(25, 14, -1))

0 commit comments

Comments
 (0)