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 httplib,smtplib使用方法
Sep 06 Python
深入理解Python爬虫代理池服务
Feb 28 Python
python实现关键词提取的示例讲解
Apr 28 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
python opencv实现运动检测
Jul 10 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
python3使用QQ邮箱发送邮件
May 20 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 Python
Python小白不正确的使用类变量实例
May 29 Python
利用Opencv实现图片的油画特效实例
Feb 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
Javascript Select操作大集合
2009/05/26 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python 获取本机ip地址的两个方法
2013/02/25 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
python装饰器的特性原理详解
2019/12/25 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
Python学习之os模块及用法
2020/06/03 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
自我评价200字分享
2013/12/17 职场文书
烹调加工管理制度
2014/02/04 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
团代会开幕词
2015/01/28 职场文书
会计岗位职责范本
2015/04/02 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
python编写函数注意事项总结
2021/03/29 Python
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL