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 相关文章推荐
Pandas标记删除重复记录的方法
Apr 08 Python
python爬取个性签名的方法
Jun 17 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
python3获取当前目录的实现方法
Jul 29 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
Django ValuesQuerySet转json方式
Mar 16 Python
python实现飞船大战
Apr 24 Python
win10安装python3.6的常见问题
Jul 01 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
vue bootstrap小例子一枚
2017/06/09 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
node内置调试方法总结
2018/02/22 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
python实现查询IP地址所在地
2015/03/29 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
jupyter安装小结
2016/03/13 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python ---lambda匿名函数介绍
2019/03/13 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
先进工作者事迹材料
2014/12/23 职场文书
苏州园林导游词
2015/02/03 职场文书
民事代理词范文
2015/05/25 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书