本节前言

排序与排名是数据探索的常用手段。本节涵盖索引排序、数值排序以及多种排名策略。

1. sort_index()

按索引(行索引或列索引)排序。

参数

参数类型默认值说明
axisint / str00=‘index’;1=‘columns’
ascendingboolTrue升序 / 降序
inplaceboolFalse是否原地修改
kindstr’quicksort’排序算法:quicksort、mergesort、heapsort、stable
na_positionstr’last''first’ / ‘last’:缺失值位置
sort_remainingboolTrueMultiIndex 是否按剩余层级排序
ignore_indexboolFalse排序后是否重置索引
keycallableNone排序前对 Index 应用的函数

示例

df = pd.DataFrame(
    {'A': [3, 1, 2]},
    index=[3, 1, 2]
)
 
df.sort_index()
#    A
# 1  1
# 2  2
# 3  3
 
df.sort_index(ascending=False)
df.sort_index(axis=1)
 
# MultiIndex 部分排序
df_mi = df.set_index(['A', 'B'])
df_mi.sort_index(level='A', sort_remaining=False)

sort_index 与 sort_values 的区别

sort_index() 按索引排序,sort_values() 按列的值排序。

2. sort_values()

按一列或多列的值排序。

参数

参数类型默认值说明
bystr / list必填参与排序的列名
axisint / str0排序轴
ascendingbool / listTrue升 / 降序,可为每列指定
inplaceboolFalse是否原地修改
kindstr’quicksort’排序算法
na_positionstr’last’缺失值位置
ignore_indexboolFalse重置索引
keycallableNone排序前应用函数

示例

df = pd.DataFrame({
    'A': [3, 1, 2, 1],
    'B': ['x', 'y', 'x', 'z']
})
 
df.sort_values('A')
#    A  B
# 1  1  y
# 3  1  z
# 2  2  x
# 0  3  x
 
# 多列排序
df.sort_values(['A', 'B'])
 
# 不同方向
df.sort_values(['A', 'B'], ascending=[True, False])
 
# 缺失值在前
df.sort_values('A', na_position='first')
 
# key 参数
df.sort_values('A', key=lambda col: col.abs())

3. rank()

计算排名。

参数

参数类型默认值说明
axisint / str0按行或列排名
methodstr’average’排名策略(见下表)
numeric_onlyboolFalse是否只对数值列排名
na_optionstr’keep''keep’ / ‘top’ / ‘bottom’:缺失值处理
ascendingboolTrue升序排名(值越大排名越高)
pctboolFalse是否返回百分比排名

method 排名策略

method行为示例:[1, 2, 2, 3] 的排名
average并列取平均排名1.0, 2.5, 2.5, 4.0
min并列取最小排名1.0, 2.0, 2.0, 4.0
max并列取最大排名1.0, 3.0, 3.0, 4.0
dense并列不跳号1.0, 2.0, 2.0, 3.0
first先到先得排名1.0, 2.0, 3.0, 4.0

示例

df = pd.DataFrame({'A': [1, 2, 2, 3], 'B': [10, 20, 30, 40]})
 
df.rank()
#      A    B
# 0  1.0  1.0
# 1  2.5  2.0
# 2  2.5  3.0
# 3  4.0  4.0
 
df['A'].rank(method='dense')
# 0    1.0
# 1    2.0
# 2    2.0
# 3    3.0
 
df['A'].rank(pct=True)
# 0    0.25
# 1    0.625
# 2    0.625
# 3    1.0
 
df['A'].rank(na_option='bottom')   # 缺失值排最后

4. nlargest()

返回数值最大的前 n 行。

df.nlargest(2, 'A')
#    A  B
# 3  3  40
# 2  2  30
 
# 多列
df.nlargest(3, ['A', 'B'])
 
# 与 sort_values 等价
df.sort_values('A', ascending=False).head(2)

5. nsmallest()

返回数值最小的前 n 行。

df.nsmallest(2, 'A')
#    A  B
# 0  1  10
# 1  2  20

应用场景

  • nlargest / nsmallest 在部分排序场景下比 sort_values() + head() 更高效。
  • 排名可与 groupby 结合,实现组内排名。

🔗 相关笔记