Skip to content

Commit d1d6513

Browse files
BUG Series.sort_index does not accept parameters kind and na_position
1 parent 7cad3f1 commit d1d6513

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

doc/source/whatsnew/v0.19.1.txt

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Bug Fixes
3333

3434

3535

36+
- Bug in ``Series.sort_index`` where parameters ``kind`` and ``na_position`` did not exist (:issue:`13589`, :issue:`14444`)
3637

3738
- Bug in localizing an ambiguous timezone when a boolean is passed (:issue:`14402`)
3839

pandas/core/series.py

+6-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,11 @@ 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+
indexer = _nargsort(index, kind=kind, ascending=ascending,
1792+
na_position=na_position)
1793+
new_index = index.take(indexer)
17911794

17921795
new_values = self._values.take(indexer)
17931796
result = self._constructor(new_values, index=new_index)

pandas/tests/series/test_sorting.py

+25
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,28 @@ 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+
# GH #14444 & #13589: Add support for sort algo choosing
150+
series = Series(index=[3, 2, 1, 4, 3])
151+
expected_series = Series(index=[1, 2, 3, 3, 4])
152+
153+
index_sorted_series = series.sort_index(kind='mergesort')
154+
assert_series_equal(expected_series, index_sorted_series)
155+
156+
index_sorted_series = series.sort_index(kind='quicksort')
157+
assert_series_equal(expected_series, index_sorted_series)
158+
159+
index_sorted_series = series.sort_index(kind='heapsort')
160+
assert_series_equal(expected_series, index_sorted_series)
161+
162+
def test_sort_index_na_position(self):
163+
series = Series(index=[3, 2, 1, 4, 3, np.nan])
164+
165+
expected_series_first = Series(index=[np.nan, 1, 2, 3, 3, 4])
166+
index_sorted_series = series.sort_index(na_position='first')
167+
assert_series_equal(expected_series_first, index_sorted_series)
168+
169+
expected_series_last = Series(index=[1, 2, 3, 3, 4, np.nan])
170+
index_sorted_series = series.sort_index(na_position='last')
171+
assert_series_equal(expected_series_last, index_sorted_series)

0 commit comments

Comments
 (0)