pandas的排序和排名的具体使用


Posted in Python onJuly 31, 2019

有的时候我们可以要根据索引的大小或者值的大小对Series和DataFrame进行排名和排序。

一、排序

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
  '''

对值进行排序的时候,无论是升序还是降序,缺失值(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: sort_values() missing 1 required positional argument: 'by'。使用by参数进行某几列(行)排序的时候,以列表中的第一个为准,可能后面的不会生效,因为有的时候无法做到既对第一行(列)进行升序排序又对第二行(列)进行排序。在指定行值进行排序的时候,必须设置axis=1,不然会报错,因为默认指定的是列索引,找不到这个索引所以报错,axis=1的意思是指定行索引。

二、排名

排名和排序有点类似,排名会有一个排名值(从1开始,一直到数组中有效数据的数量),它与numpy.argsort的间接排序索引差不多,只不过它可以根据某种规则破坏平级关系。

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
  '''

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
  '''

method参数和ascending参数的设置与Series一样。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python通过websocket与js客户端通信示例分析
Jun 25 Python
MySQL最常见的操作语句小结
May 07 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 Python
对于Python深浅拷贝的理解
Jul 29 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
Python计算公交发车时间的完整代码
Feb 12 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
python中封包建立过程实例
Feb 18 Python
Django实现drf搜索过滤和排序过滤
Jun 21 Python
pandas如何处理缺失值
Jul 31 #Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 #Python
使用pandas读取文件的实现
Jul 31 #Python
python3实现mysql导出excel的方法
Jul 31 #Python
Django接收post前端返回的json格式数据代码实现
Jul 31 #Python
python快速编写单行注释多行注释的方法
Jul 31 #Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 #Python
You might like
一篇入门的php Class 文章
2007/04/04 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP中的self关键字详解
2019/06/23 PHP
删除重复数据的算法
2006/11/23 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
python中字典(Dictionary)用法实例详解
2015/05/30 Python
Python 闭包的使用方法
2017/09/07 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
如何运行带参数的python脚本
2019/11/15 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
费用会计岗位职责
2014/01/01 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
考试没考好检讨书
2015/05/06 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
高中地理教学反思
2016/02/19 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS