Skip to content

Commit 766165b

Browse files
Updating sort_index for Series to follow pattern DataFrame
1 parent 7cad3f1 commit 766165b

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

pandas/core/series.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -1773,7 +1773,7 @@ def _try_kind_sort(arr):
17731773

17741774
@Appender(generic._shared_docs['sort_index'] % _shared_doc_kwargs)
17751775
def sort_index(self, axis=0, level=None, ascending=True, inplace=False,
1776-
sort_remaining=True):
1776+
kind='quicksort', na_position='last', sort_remaining=True):
17771777

17781778
axis = self._get_axis_number(axis)
17791779
index = self.index
@@ -1786,8 +1786,18 @@ def sort_index(self, axis=0, level=None, ascending=True, inplace=False,
17861786
indexer = _ensure_platform_int(indexer)
17871787
new_index = index.take(indexer)
17881788
else:
1789-
new_index, indexer = index.sort_values(return_indexer=True,
1790-
ascending=ascending)
1789+
from pandas.core.groupby import _nargsort
1790+
1791+
if ((ascending and index.is_monotonic_increasing) or
1792+
(not ascending and index.is_monotonic_decreasing)):
1793+
if inplace:
1794+
return
1795+
else:
1796+
return self.copy()
1797+
1798+
indexer = _nargsort(index, kind=kind, ascending=ascending,
1799+
na_position=na_position)
1800+
new_index = index.take(indexer)
17911801

17921802
new_values = self._values.take(indexer)
17931803
result = self._constructor(new_values, index=new_index)

pandas/tests/series/test_sorting.py

+24
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,27 @@ def test_sort_index_multiindex(self):
144144
# rows share same level='A': sort has no effect without remaining lvls
145145
res = s.sort_index(level='A', sort_remaining=False)
146146
assert_series_equal(s, res)
147+
148+
def test_sort_index_kind(self):
149+
series = Series(index=[3, 2, 1, 4, 3])
150+
expected_series = Series(index=[1, 2, 3, 3, 4])
151+
152+
index_sorted_series = series.sort_index(kind='mergesort')
153+
assert_series_equal(expected_series, index_sorted_series)
154+
155+
index_sorted_series = series.sort_index(kind='quicksort')
156+
assert_series_equal(expected_series, index_sorted_series)
157+
158+
index_sorted_series = series.sort_index(kind='heapsort')
159+
assert_series_equal(expected_series, index_sorted_series)
160+
161+
def test_sort_index_na_position(self):
162+
series = Series(index=[3, 2, 1, 4, 3, np.nan])
163+
164+
expected_series_first = Series(index=[np.nan, 1, 2, 3, 3, 4])
165+
index_sorted_series = series.sort_index(na_position='first')
166+
assert_series_equal(expected_series_first, index_sorted_series)
167+
168+
expected_series_last = Series(index=[1, 2, 3, 3, 4, np.nan])
169+
index_sorted_series = series.sort_index(na_position='last')
170+
assert_series_equal(expected_series_last, index_sorted_series)

0 commit comments

Comments
 (0)