Skip to content

Commit c092708

Browse files
meeseeksmachinejschendel
authored andcommitted
Backport PR pandas-dev#28671 on branch 0.25.x (BUG: restore limit in RangeIndex.get_indexer) (pandas-dev#28712)
1 parent 0b7c2d5 commit c092708

File tree

4 files changed

+29
-3
lines changed

4 files changed

+29
-3
lines changed

doc/source/whatsnew/v0.25.2.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Interval
4949
Indexing
5050
^^^^^^^^
5151

52-
-
52+
- Fix regression in :meth:`DataFrame.reindex` not following ``limit`` argument (:issue:`28631`).
5353
-
5454
-
5555
-

pandas/core/indexes/range.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -380,8 +380,10 @@ def get_loc(self, key, method=None, tolerance=None):
380380

381381
@Appender(_index_shared_docs["get_indexer"])
382382
def get_indexer(self, target, method=None, limit=None, tolerance=None):
383-
if not (method is None and tolerance is None and is_list_like(target)):
384-
return super().get_indexer(target, method=method, tolerance=tolerance)
383+
if com._any_not_none(method, tolerance, limit) or not is_list_like(target):
384+
return super().get_indexer(
385+
target, method=method, tolerance=tolerance, limit=limit
386+
)
385387

386388
if self.step > 0:
387389
start, stop, step = self.start, self.stop, self.step

pandas/tests/frame/test_indexing.py

+16
Original file line numberDiff line numberDiff line change
@@ -2242,6 +2242,22 @@ def test_reindex_frame_add_nat(self):
22422242
assert mask[-5:].all()
22432243
assert not mask[:-5].any()
22442244

2245+
def test_reindex_limit(self):
2246+
# GH 28631
2247+
data = [["A", "A", "A"], ["B", "B", "B"], ["C", "C", "C"], ["D", "D", "D"]]
2248+
exp_data = [
2249+
["A", "A", "A"],
2250+
["B", "B", "B"],
2251+
["C", "C", "C"],
2252+
["D", "D", "D"],
2253+
["D", "D", "D"],
2254+
[np.nan, np.nan, np.nan],
2255+
]
2256+
df = DataFrame(data)
2257+
result = df.reindex([0, 1, 2, 3, 4, 5], method="ffill", limit=1)
2258+
expected = DataFrame(exp_data)
2259+
tm.assert_frame_equal(result, expected)
2260+
22452261
def test_set_dataframe_column_ns_dtype(self):
22462262
x = DataFrame([datetime.now(), datetime.now()])
22472263
assert x[0].dtype == np.dtype("M8[ns]")

pandas/tests/indexes/test_range.py

+8
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,14 @@ def test_get_indexer_backfill(self):
416416
expected = np.array([0, 1, 1, 2, 2, 3, 3, 4, 4, 5], dtype=np.intp)
417417
tm.assert_numpy_array_equal(indexer, expected)
418418

419+
def test_get_indexer_limit(self):
420+
# GH 28631
421+
idx = RangeIndex(4)
422+
target = RangeIndex(6)
423+
result = idx.get_indexer(target, method="pad", limit=1)
424+
expected = np.array([0, 1, 2, 3, 3, -1], dtype=np.intp)
425+
tm.assert_numpy_array_equal(result, expected)
426+
419427
def test_join_outer(self):
420428
# join with Int64Index
421429
other = Int64Index(np.arange(25, 14, -1))

0 commit comments

Comments
 (0)