Skip to content

DOC: update the pandas.Series.sort_index docstring #20248

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 115 additions & 1 deletion pandas/core/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -2016,10 +2016,124 @@ def _try_kind_sort(arr):
else:
return result.__finalize__(self)

@Appender(generic._shared_docs['sort_index'] % _shared_doc_kwargs)
def sort_index(self, axis=0, level=None, ascending=True, inplace=False,
kind='quicksort', na_position='last', sort_remaining=True):
"""
Sort object by labels.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Sort object by labels." -> "Sort Series by index labels." (if we make the docstring specific for Series and not share it with DataFrame, we can make it more specific)


Returns a new Series sorted by label if `inplace` argument is `False`,
otherwise updates the original series and returns `null`.

Parameters
----------
axis : int, default 0
Axis to direct sorting.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you mention this can only be 0 for Series ?

level : int, default None
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

" default None" -> "optional"

If not None, sort on values in specified index level(s).
ascending : boolean, default true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

boolean -> bool (consistent with keyword below)

Sort ascending vs. descending.
inplace : bool, default False
If True, perform operation in-place.
kind : {'quicksort', 'mergesort', 'heapsort'}, default 'quicksort'
Choice of sorting algorithm. See also ndarray.np.sort for more
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"ndarray.np.sort" -> "numpy.sort"
(or even better to link to the docs: :func:`numpy.sort`)

information. `mergesort` is the only stable algorithm. For
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can use normal quotes in this case (like 'mergesort') to indicate it is a string

DataFrames, this option is only applied when sorting on a single
column or label.
na_position : {'first', 'last'}, default 'last'
If `first` puts NaNs at the beginning, `last` puts NaNs at the end.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here (using normal quotes instead of backticks around first and last)

Not implemented for MultiIndex.
sort_remaining : bool, default True
If true and sorting by level and index is multilevel, sort by other
levels too (in order) after sorting by specified level.

Returns
-------
sorted_obj : Series
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Return values don't need names unless with tuples. Also missing description.


See Also
--------
sort_values : Sort by the value
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you add DataFrame.sort_index, DataFrame.sort_values

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make this Series.sort_values


Examples
--------
>>> s = pd.Series(['a', 'b', 'c', 'd'], index=[3,2,1,4])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

spaces after comma (PEP8)

>>> s.sort_index()
1 c
2 b
3 a
4 d
dtype: object

Sort Descending

>>> s = pd.Series(['a', 'b', 'c', 'd'], index=[3,2,1,4])
>>> s.sort_index(ascending=False)
4 d
3 a
2 b
1 c
dtype: object

Sort Inplace

>>> s = pd.Series(['a', 'b', 'c', 'd'], index=[3,2,1,4])
>>> s.sort_index(inplace=True)
>>> s
1 c
2 b
3 a
4 d
dtype: object

Sort placing NaNs at first
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you change "Sort placing NaNs at first" in "By default NaNs are put at the end, but use na_position to place them at the beginning"


>>> s = pd.Series(['a', 'b', 'c', 'd'], index=[3,2,1,np.nan])
>>> s.sort_index(na_position='first')
NaN d
1.0 c
2.0 b
3.0 a
dtype: object

Specify index level to sort

>>> import numpy as np
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't need the numpy import

>>> arrays = [np.array(['qux', 'qux', 'foo', 'foo',\
'baz', 'baz', 'bar', 'bar']),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bad indentation.

... np.array(['two', 'one', 'two', 'one',\
'two', 'one', 'two', 'one'])]
>>> s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8], index=arrays)
>>> s.sort_index(level=1)
bar one 8
baz one 6
foo one 4
qux one 2
bar two 7
baz two 5
foo two 3
qux two 1
dtype: int64

Does not sort by remaining levels when sorting by levels

>>> import numpy as np
>>> arrays = [np.array(['qux', 'qux', 'foo', 'foo',\
'baz', 'baz', 'bar', 'bar']),
... np.array(['two', 'one', 'two', 'one',\
'two', 'one', 'two', 'one'])]
>>> s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8], index=arrays)
>>> s.sort_index(level=1, sort_remaining=False)
qux one 2
foo one 4
baz one 6
bar one 8
qux two 1
foo two 3
baz two 5
bar two 7
dtype: int64
"""

# TODO: this can be combined with DataFrame.sort_index impl as
# almost identical
inplace = validate_bool_kwarg(inplace, 'inplace')
Expand Down