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实现给文件添加内容及得到文件信息的方法
May 28 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
python django 访问静态文件出现404或500错误
Jan 20 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
完美解决安装完tensorflow后pip无法使用的问题
Jun 11 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
Python 转换文本编码实现解析
Aug 27 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
python如何构建mock接口服务
Jan 28 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
php文件读取方法实例分析
2015/06/20 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
python多线程编程中的join函数使用心得
2014/09/02 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
python+opencv实现动态物体识别
2018/01/09 Python
详解Python中的四种队列
2018/05/21 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
Python关于反射的实例代码分享
2020/02/20 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
python help函数实例用法
2020/12/06 Python
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
幼儿园小班评语大全
2014/04/17 职场文书
新闻传播专业求职信
2014/07/22 职场文书
政府四风问题整改措施
2014/10/04 职场文书
毕业生见习报告总结
2014/11/08 职场文书
2014年商场工作总结
2014/11/22 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
Python实现数据的序列化操作详解
2022/07/07 Python