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采集腾讯新闻实例
Jul 10 Python
Python中扩展包的安装方法详解
Jun 14 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
详解django三种文件下载方式
Apr 06 Python
Python实现的端口扫描功能示例
Apr 08 Python
对python 多个分隔符split 的实例详解
Dec 20 Python
pandas.cut具体使用总结
Jun 24 Python
python多进程重复加载的解决方式
Dec 13 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
keras中的History对象用法
Jun 19 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程序员学习使用Swoole的理由
2018/06/24 PHP
PHP fclose函数用法总结
2019/02/15 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
js查找父节点的简单方法
2008/06/28 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
详解a++和++a的区别
2017/08/30 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
用Python编写简单的定时器的方法
2015/05/02 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python标准库shutil用法实例详解
2018/08/13 Python
python 自定义装饰器实例详解
2019/07/20 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
python梯度下降算法的实现
2020/02/24 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
详解python中的异常捕获
2020/12/15 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
市场营销专科应届生求职信
2013/11/24 职场文书
门诊挂号室室长岗位职责
2013/11/27 职场文书
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers