Python pandas排序与排名详解:Series和DataFrame操作指南

小林子
小林子
发布时间:2026-10-13| 5人浏览过
原创

本文详细介绍Python中pandas库的排序与排名功能。涵盖Series和DataFrame按索引或值排序的方法,包括sort_index和sort_values的使用及注意事项。同时解析rank函数的多种排名策略(如first、min、max、average)及处理重复值和平局的情况,帮助开发者高效处理数据排序与排名需求。

在实际数据处理中,我们经常需要根据索引顺序或数值大小对Series和DataFrame对象进行排序或排名操作。

pandas排序操作详解

一、排序操作

pandas库提供了sort_index方法,允许用户根据行索引或列索引,按照字典序规则对数据进行排序。

a、Series对象的排序

1、基于索引的排序


  #定义一个Series
  s = Series([1,2,3],index=["a","c","b"])
  #对Series的索引进行排序,默认是升序
  print(s.sort_index())
  '''
  a  1
  b  3
  c  2
  '''
  #对索引进行降序排序
  print(s.sort_index(ascending=False))
  '''
  c  2
  b  3
  a  1
  '''

2、基于数值的排序


  s = Series([np.nan,1,7,2,0],index=["a","c","e","b","d"])
  #对Series的值进行排序,默认是按值的升序进行排序的
  print(s.sort_values())
  '''
  d  0.0
  c  1.0
  b  2.0
  e  7.0
  a  NaN
  '''
  #对Seires的值进行降序排序
  print(s.sort_values(ascending=False))
  '''
  e  7.0
  b  2.0
  c  1.0
  d  0.0
  a  NaN
  '''

在对Series的值进行排序时,无论选择升序还是降序,缺失值(NaN)始终会被排列在序列的最后位置。

b、DataFrame对象的排序

1、基于索引的排序


  a = np.arange(9).reshape(3,3)
  data = DataFrame(a,index=["0","2","1"],columns=["c","a","b"])
  #按行的索引升序进行排序,默认按行,升序
  print(data.sort_index())
  '''
    c a b
  0 0 1 2
  1 6 7 8
  2 3 4 5
  '''
  #按行的索引按降序进行排序
  print(data.sort_index(ascending=False))
  '''
    c a b
  2 3 4 5
  1 6 7 8
  0 0 1 2
  '''
  #按列升序的索引进行排序
  print(data.sort_index(axis=1))
  '''
    a b c
  0 1 2 0
  2 4 5 3
  1 7 8 6
  '''
  #按列降序的索引进行排序
  print(data.sort_index(ascending=False))
  '''
    c a b
  2 3 4 5
  1 6 7 8
  0 0 1 2
  '''

2、基于数值的排序


  a = [[9,3,1],[1,2,8],[1,0,5]]
  data = DataFrame(a, index=["0", "2", "1"], columns=["c", "a", "b"])
  #按指定列的值大小顺序进行排序
  print(data.sort_values(by="c"))
  '''
    c a b
  2 1 2 8
  1 1 0 5
  0 9 3 1
  '''
  print(data.sort_values(by=["c","a"]))
  '''
    c a b
  1 1 0 5
  2 1 2 8
  0 9 3 1
  '''
  #按指定行值进行排序
  print(data.sort_values(by="0",axis=1))
  '''
    b a c
  0 1 3 9
  2 8 2 1
  1 5 0 1
  '''

需要注意的是,对DataFrame进行按值排序时,必须通过by参数指定具体的列名或行名。若未指定by参数,程序将抛出TypeError错误,提示缺少必需的位置参数'by'。当使用by参数指定多列(或多行)排序时,排序优先级以列表中的第一个元素为准;后续元素可能不生效,因为无法同时满足对第一列升序且对第二列不同方向排序的逻辑冲突。此外,若要对行值进行排序,必须显式设置axis=1参数,否则默认按列索引查找会因找不到对应索引而报错,axis=1明确指定了操作对象为行索引。

pandas排名功能解析

二、排名操作

排名功能与排序类似,但会生成一个从1开始、至有效数据数量结束的排名值。其原理类似于numpy.argsort的间接排序索引,但rank函数提供了更灵活的规则来打破平局关系。

a、Series对象的排名


  s = Series([1,3,2,1,6],index=["a","c","d","b","e"])
  #默认是根据值的大小进行平均排名
  '''
  1是最小的,所以第一个1排在第一,第二个1排在第二
  因为取的是平均排名,所以1的排名为1.5
  '''
  print(s.rank())
  '''
  a  1.5
  c  4.0
  d  3.0
  b  1.5
  e  5.0
  '''
  #根据值在数组中出现的顺序进行排名
  print(s.rank(method="first"))
  '''
  a  1.0
  c  4.0
  d  3.0
  b  2.0
  e  5.0
  '''

rank函数的method参数支持多种策略:'first'表示按值在原始数据中出现的顺序分配排名;'min'使用分组内的最小排名值;'max'使用分组内的最大排名值;'average'(默认值)则使用平均排名。此外,可通过ascending参数控制排名是升序还是降序排列。

b、DataFrame对象的排名


  a = [[9, 3, 1], [1, 2, 8], [1, 0, 5]]
  data = DataFrame(a, index=["0", "2", "1"], columns=["c", "a", "b"])
  print(data)
  '''
    c a b
  0 9 3 1
  2 1 2 8
  1 1 0 5
  '''
  #默认按列进行排名
  print(data.rank())
  '''
     c  a  b
  0 3.0 3.0 1.0
  2 1.5 2.0 3.0
  1 1.5 1.0 2.0
  '''
  #按行进行排名
  print(data.rank(axis=1))
  '''
     c  a  b
  0 3.0 2.0 1.0
  2 1.0 2.0 3.0
  1 2.0 1.0 3.0
  '''

DataFrame的排名操作中,method参数和ascending参数的设置逻辑与Series完全一致。

以上内容涵盖了pandas中排序与排名的核心用法,希望能为读者的数据分析工作提供实用帮助,欢迎继续支持本站获取更多技术资源。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。