pandas.DataFrame.sort_values#

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)[源代码]#

按任一轴上的值排序。

参数
by字符串或字符串列表

要排序的姓名或姓名列表。

  • 如果 axis 是0还是 'index' 然后 by 可以包含索引级别和/或列标签。

  • 如果 axis 为1或 'columns' 然后 by 可以包含列级别和/或索引标签。

axis{0或‘index’,1或‘Columns’},默认为0

要排序的轴。

ascending布尔值或布尔值列表,默认为True

升序和降序排序。为多个排序顺序指定列表。如果这是一个bool列表,则必须与by的长度匹配。

inplace布尔值,默认为False

如果为True,则就地执行操作。

kind{‘快速排序’,‘合并排序’,‘堆排序’,‘稳定’},默认‘快速排序’

排序算法的选择。另请参阅 numpy.sort() 了解更多信息。 mergesortstable 是唯一稳定的算法。对于DataFrames,此选项仅在对单个列或标签进行排序时应用。

na_position{‘First’,‘Last’},默认为‘Last’

在以下情况下将NAS放在开头 firstlast 把Nans放在末尾。

ignore_index布尔值,默认为False

如果为True,则生成的轴将标记为0,1,…,n-1。

1.0.0 新版功能.

key可调用,可选

对排序前的值应用KEY函数。这类似于 key 建筑中的参数 sorted() 函数,但显著不同的是,这 key 函数应为 矢量化 。它应该期待一个 Series 并返回与输入形状相同的Series。它将应用于中的每列 by 独立的。

1.1.0 新版功能.

退货
DataFrame或无

具有排序值的DataFrame或None,如果 inplace=True

参见

DataFrame.sort_index

按索引对DataFrame进行排序。

Series.sort_values

类似的方法适用于级数。

示例

>>> df = pd.DataFrame({
...     'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
...     'col2': [2, 1, 9, 8, 7, 4],
...     'col3': [0, 1, 9, 4, 2, 3],
...     'col4': ['a', 'B', 'c', 'D', 'e', 'F']
... })
>>> df
  col1  col2  col3 col4
0    A     2     0    a
1    A     1     1    B
2    B     9     9    c
3  NaN     8     4    D
4    D     7     2    e
5    C     4     3    F

按第1列排序

>>> df.sort_values(by=['col1'])
  col1  col2  col3 col4
0    A     2     0    a
1    A     1     1    B
2    B     9     9    c
5    C     4     3    F
4    D     7     2    e
3  NaN     8     4    D

按多列排序

>>> df.sort_values(by=['col1', 'col2'])
  col1  col2  col3 col4
1    A     1     1    B
0    A     2     0    a
2    B     9     9    c
5    C     4     3    F
4    D     7     2    e
3  NaN     8     4    D

排序降序

>>> df.sort_values(by='col1', ascending=False)
  col1  col2  col3 col4
4    D     7     2    e
5    C     4     3    F
2    B     9     9    c
0    A     2     0    a
1    A     1     1    B
3  NaN     8     4    D

将NAS放在首位

>>> df.sort_values(by='col1', ascending=False, na_position='first')
  col1  col2  col3 col4
3  NaN     8     4    D
4    D     7     2    e
5    C     4     3    F
2    B     9     9    c
0    A     2     0    a
1    A     1     1    B

使用键函数进行排序

>>> df.sort_values(by='col4', key=lambda col: col.str.lower())
   col1  col2  col3 col4
0    A     2     0    a
1    A     1     1    B
2    B     9     9    c
3  NaN     8     4    D
4    D     7     2    e
5    C     4     3    F

带有键参数的自然排序,使用 natsort <https://github.com/SethMMorton/natsort> 包裹。

>>> df = pd.DataFrame({
...    "time": ['0hr', '128hr', '72hr', '48hr', '96hr'],
...    "value": [10, 20, 30, 40, 50]
... })
>>> df
    time  value
0    0hr     10
1  128hr     20
2   72hr     30
3   48hr     40
4   96hr     50
>>> from natsort import index_natsorted
>>> df.sort_values(
...    by="time",
...    key=lambda x: np.argsort(index_natsorted(df["time"]))
... )
    time  value
0    0hr     10
3   48hr     40
2   72hr     30
4   96hr     50
1  128hr     20