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 相关文章推荐
pytyon 带有重复的全排列
Aug 13 Python
python使用beautifulsoup从爱奇艺网抓取视频播放
Jan 23 Python
python数据结构树和二叉树简介
Apr 29 Python
python中的五种异常处理机制介绍
Sep 02 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
python实现图片压缩代码实例
Aug 12 Python
深入了解python列表(LIST)
Jun 08 Python
django教程如何自学
Jul 31 Python
python 深度学习中的4种激活函数
Sep 18 Python
Python常用GUI框架原理解析汇总
Dec 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下获取客户端ip地址的函数
2010/03/15 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
Django的信号机制详解
2017/05/05 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
单位人事专员介绍信
2014/01/11 职场文书
顶撞老师检讨书
2014/02/07 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
2014年公务员工作总结
2014/11/18 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
黄山导游词
2015/01/31 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
综合素质自我评价评语
2015/03/06 职场文书
国情备忘录观后感
2015/06/04 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
python blinker 信号库
2022/05/04 Python
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android