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爬虫模拟登录带验证码网站
Jan 22 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
python调用java的jar包方法
Dec 15 Python
Python3 max()函数基础用法
Feb 19 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
python 如何调用远程接口
Sep 11 Python
Python 操作 MySQL数据库
Sep 18 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 is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
JS模板实现方法
2013/04/03 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
python调用shell的方法
2013/11/20 Python
python同步两个文件夹下的内容
2019/08/29 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
Pygame框架实现飞机大战
2020/08/07 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
电焊工岗位职责
2014/03/06 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
英语专业求职信
2014/07/08 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
部队2015年终工作总结
2015/04/02 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书