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 相关文章推荐
在Python3中初学者应会的一些基本的提升效率的小技巧
Mar 31 Python
Python中操作文件之write()方法的使用教程
May 25 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
python交互界面的退出方法
Feb 16 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
Python中私有属性的定义方式
Mar 05 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
opencv实现图像平移效果
Mar 24 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 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中json_encode()和json_decode()
2014/05/25 PHP
PHP扩展开发入门教程
2015/02/26 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
jquery 插件开发方法小结
2009/10/23 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
python Tcp协议发送和接收信息的例子
2019/07/22 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
Python中的Cookie模块如何使用
2020/06/04 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
保时捷设计:Porsche Design
2019/03/30 全球购物
Java如何格式化日期
2012/08/07 面试题
元旦寄语大全
2014/04/10 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
奖励申请报告范文
2015/05/15 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电