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 获取et和excel的版本号
Apr 09 Python
python实现dict版图遍历示例
Feb 19 Python
Django实现图片文字同时提交的方法
May 26 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
Django如何实现内容缓存示例详解
Sep 24 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
tensorflow如何批量读取图片
Aug 29 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
Python图片检索之以图搜图
May 31 Python
Python中的嵌套循环详情
Mar 23 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中使用Oracle数据库(1)
2006/10/09 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
你必须知道的Javascript知识点之"字面量和对应类型"说明介绍
2013/04/23 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
koa源码中promise的解读
2018/11/13 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python常用小技巧总结
2015/06/01 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
浅析Python的命名空间与作用域
2020/11/25 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
父亲追悼会答谢词
2014/01/17 职场文书
会计学生自我鉴定
2014/02/06 职场文书
vue使用watch监听属性变化
2022/04/30 Vue.js