Skip to content

Commit

Permalink
PERF: Delay creation of indexer in RangeIndex.sort_values (pandas-dev…
Browse files Browse the repository at this point in the history
  • Loading branch information
mroeschke authored and noatamir committed Nov 9, 2022
1 parent ccc22ab commit 29b4389
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
2 changes: 1 addition & 1 deletion doc/source/whatsnew/v1.6.0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ Performance improvements
- Performance improvement for :meth:`MultiIndex.intersection` (:issue:`48604`)
- Performance improvement in ``var`` for nullable dtypes (:issue:`48379`).
- Performance improvement to :func:`read_sas` with ``blank_missing=True`` (:issue:`48502`)
-
- Memory improvement in :meth:`RangeIndex.sort_values` (:issue:`48801`)

.. ---------------------------------------------------------------------------
.. _whatsnew_160.bug_fixes:
Expand Down
13 changes: 8 additions & 5 deletions pandas/core/indexes/range.py
Original file line number Diff line number Diff line change
Expand Up @@ -554,8 +554,6 @@ def sort_values(
na_position: str = "last",
key: Callable | None = None,
):
sorted_index = self
indexer = RangeIndex(range(len(self)))
if key is not None:
return super().sort_values(
return_indexer=return_indexer,
Expand All @@ -565,17 +563,22 @@ def sort_values(
)
else:
sorted_index = self
inverse_indexer = False
if ascending:
if self.step < 0:
sorted_index = self[::-1]
indexer = indexer[::-1]
inverse_indexer = True
else:
if self.step > 0:
sorted_index = self[::-1]
indexer = indexer = indexer[::-1]
inverse_indexer = True

if return_indexer:
return sorted_index, indexer
if inverse_indexer:
rng = range(len(self) - 1, -1, -1)
else:
rng = range(len(self))
return sorted_index, RangeIndex(rng)
else:
return sorted_index

Expand Down

0 comments on commit 29b4389

Please sign in to comment.