Skip to content

Commit 37c8298

Browse files
committed
also use for RangeIndex
1 parent bf5544f commit 37c8298

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

pandas/core/indexes/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5180,7 +5180,7 @@ def _getitem_slice(self: _IndexT, slobj: slice) -> _IndexT:
51805180
"""
51815181
res = self._data[slobj]
51825182
result = type(self)._simple_new(res, name=self._name)
5183-
if isinstance(result._engine, libindex.IndexEngine): # may also be IntervalTree
5183+
if "_engine" in self._cache:
51845184
reverse = slobj.step is not None and slobj.step < 0
51855185
result._engine._update_from_sliced(self._engine, reverse=reverse)
51865186

pandas/core/indexes/interval.py

+7
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,13 @@ def __contains__(self, key: Any) -> bool:
374374
except KeyError:
375375
return False
376376

377+
def _getitem_slice(self, slobj: slice) -> IntervalIndex:
378+
"""
379+
Fastpath for __getitem__ when we know we have a slice.
380+
"""
381+
res = self._data[slobj]
382+
return type(self)._simple_new(res, name=self._name)
383+
377384
@cache_readonly
378385
def _multiindex(self) -> MultiIndex:
379386
return MultiIndex.from_arrays([self.left, self.right], names=["left", "right"])

pandas/core/indexes/range.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -903,8 +903,7 @@ def __getitem__(self, key):
903903
Conserve RangeIndex type for scalar and slice keys.
904904
"""
905905
if isinstance(key, slice):
906-
new_range = self._range[key]
907-
return self._simple_new(new_range, name=self._name)
906+
return self._getitem_slice(key)
908907
elif is_integer(key):
909908
new_key = int(key)
910909
try:
@@ -927,7 +926,12 @@ def _getitem_slice(self: RangeIndex, slobj: slice) -> RangeIndex:
927926
Fastpath for __getitem__ when we know we have a slice.
928927
"""
929928
res = self._range[slobj]
930-
return type(self)._simple_new(res, name=self._name)
929+
result = type(self)._simple_new(res, name=self._name)
930+
if "_engine" in self._cache:
931+
reverse = slobj.step is not None and slobj.step < 0
932+
result._engine._update_from_sliced(self._engine, reverse=reverse)
933+
934+
return result
931935

932936
@unpack_zerodim_and_defer("__floordiv__")
933937
def __floordiv__(self, other):

0 commit comments

Comments
 (0)