Skip to content

Commit 29b4389

Browse files
mroeschkenoatamir
authored andcommitted
PERF: Delay creation of indexer in RangeIndex.sort_values (pandas-dev#48801)
1 parent ccc22ab commit 29b4389

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

doc/source/whatsnew/v1.6.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ Performance improvements
148148
- Performance improvement for :meth:`MultiIndex.intersection` (:issue:`48604`)
149149
- Performance improvement in ``var`` for nullable dtypes (:issue:`48379`).
150150
- Performance improvement to :func:`read_sas` with ``blank_missing=True`` (:issue:`48502`)
151-
-
151+
- Memory improvement in :meth:`RangeIndex.sort_values` (:issue:`48801`)
152152

153153
.. ---------------------------------------------------------------------------
154154
.. _whatsnew_160.bug_fixes:

pandas/core/indexes/range.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,6 @@ def sort_values(
554554
na_position: str = "last",
555555
key: Callable | None = None,
556556
):
557-
sorted_index = self
558-
indexer = RangeIndex(range(len(self)))
559557
if key is not None:
560558
return super().sort_values(
561559
return_indexer=return_indexer,
@@ -565,17 +563,22 @@ def sort_values(
565563
)
566564
else:
567565
sorted_index = self
566+
inverse_indexer = False
568567
if ascending:
569568
if self.step < 0:
570569
sorted_index = self[::-1]
571-
indexer = indexer[::-1]
570+
inverse_indexer = True
572571
else:
573572
if self.step > 0:
574573
sorted_index = self[::-1]
575-
indexer = indexer = indexer[::-1]
574+
inverse_indexer = True
576575

577576
if return_indexer:
578-
return sorted_index, indexer
577+
if inverse_indexer:
578+
rng = range(len(self) - 1, -1, -1)
579+
else:
580+
rng = range(len(self))
581+
return sorted_index, RangeIndex(rng)
579582
else:
580583
return sorted_index
581584

0 commit comments

Comments
 (0)