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实现2014火车票查询代码分享
Jan 10 Python
轻松理解Python 中的 descriptor
Sep 15 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
在pycharm中显示python画的图方法
Aug 31 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
深入理解Tensorflow中的masking和padding
Feb 24 Python
QML实现钟表效果
Jun 02 Python
python开发前景如何
Jun 11 Python
python代码实现猜拳小游戏
Nov 30 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
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
JQuery遍历DOM节点的方法
2015/06/11 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
python访问类中docstring注释的实现方法
2015/05/04 Python
python中range()与xrange()用法分析
2016/09/21 Python
python中正则表达式的使用方法
2018/02/25 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
《逃家小兔》教学反思
2014/02/23 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
质检员岗位职责
2015/02/03 职场文书
化工厂员工工作总结
2015/10/15 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python