100天精通Python(数据分析篇)——第70天:Pandas常用排序、排名方法(sort_index、sort_values、rank)

news2024/11/24 6:20:04

在这里插入图片描述

文章目录

  • 每篇前言
  • 一、按索引排序:sort_index()
    • 1. Series类型排序
      • 1)升序
      • 2)降序
    • 2. DataFrame类型排序
      • 1)按行索引排序
      • 2)按列索引排序
  • 二、按值排序:sort_values()
    • 1. Series类型排序
      • 1)升序
      • 2)降序
    • 2. DataFrame类型排序
      • 1)单列排序
      • 2)多列排序
      • 3)排序算法
      • 4)缺失值
      • 5)key参数
  • 三、排名:rank()
    • 1. method='average'排名
    • 2. method='min'排名
    • 3. method='max'排名
    • 4. method='first’排名
    • 5. method='dense’排名

每篇前言

  • 🏆🏆作者介绍:Python领域优质创作者、华为云享专家、阿里云专家博主、2021年CSDN博客新星Top6

  • 🔥🔥本文已收录于Python全栈系列专栏:《100天精通Python从入门到就业》
  • 📝​📝​此专栏文章是专门针对Python零基础小白所准备的一套完整教学,从0到100的不断进阶深入的学习,各知识点环环相扣
  • 🎉🎉订阅专栏后续可以阅读Python从入门到就业100篇文章还可私聊进千人Python全栈交流群(手把手教学,问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述
在这里插入图片描述

对数据集进行排序和排名的是常用最基础的数据分析手段,pandas提供了方便的排序和排名的方法,通过简单的语句和参数就可以实现常用的排序和排名

一、按索引排序:sort_index()

sort_index() 是 pandas 中按索引排序的函数,默认情况下, sort_index 是按行索引来排序。

语法格式

sort_index(
        self,
        axis=0,
        level=None,
        ascending: bool | int | Sequence[bool | int] = True,
        inplace: bool = False,
        kind: str = "quicksort",
        na_position: str = "last",
        sort_remaining: bool = True,
        ignore_index: bool = False,
        key: IndexKeyFunc = None,
    )

常用参数说明

  • axis:默认为axis=0表示按行排序,当axis=1表示按列排序。
  • ascending:默认为True升序排序,为False降序排序
  • inplace:是否修改原始数据

1. Series类型排序

Series对象排序中,axis参数只能为0

1)升序

默认 ascending=True 升序

import pandas as pd
import numpy as np

df = pd.Series([1, 2, 3, 4], index=["A", "B", "C", "D"])
print(df.sort_index())

运行结果:
在这里插入图片描述

2)降序

设置 ascending=False 倒序

import pandas as pd
import numpy as np

df = pd.Series([1, 2, 3, 4], index=["A", "B", "C", "D"],)
print(df.sort_index(ascending=False))

运行结果:
在这里插入图片描述

2. DataFrame类型排序

1)按行索引排序

默认 axis=0 按行标签索引排序

    1. 默认 ascending=True 升序排序
    import pandas as pd
    import numpy as np
    
    data = np.arange(16).reshape((4, 4))
    df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
    print(df)
    print(df.sort_index(axis=0))
    

    在这里插入图片描述

    1. 设置 ascending=False 倒序
    import pandas as pd
    import numpy as np
    
    data = np.arange(16).reshape((4, 4))
    df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
    print(df)
    print(df.sort_index(axis=0, ascending=False))
    

    运行结果:
    在这里插入图片描述

2)按列索引排序

设置 axis=1 按列标签索引排序

    1. 默认 ascending=True 升序排序
    import pandas as pd
    import numpy as np
    
    data = np.arange(16).reshape((4, 4))
    df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
    print(df)
    print(df.sort_index(axis=1, ascending=True))
    

    运行结果:
    在这里插入图片描述

    1. 设置 ascending=False 倒序
    import pandas as pd
    import numpy as np
    
    data = np.arange(16).reshape((4, 4))
    df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
    print(df)
    print(df.sort_index(axis=1, ascending=False))
    

    在这里插入图片描述

二、按值排序:sort_values()

在实际数据分析过程中用得最多是按某一列的值进行排序,在pandas中sort_values() 是按数值排序的方法

1. Series类型排序

语法格式

sort_values(
        self,
        axis=0,
        ascending: bool | int | Sequence[bool | int] = True,
        inplace: bool = False,
        kind: str = "quicksort",
        na_position: str = "last",
        ignore_index: bool = False,
        key: ValueKeyFunc = None,
    )

常用参数说明

  • axis:只能为0
  • ascending:默认为True升序排序,为False降序排序
  • inplace:是否修改原始Series

1)升序

默认 ascending=True 升序

import pandas as pd
import numpy as np

df = pd.Series([5, 3, 2, 4, 1], index=["A", "B", "C", "D", "E"])
print(df)
print(df.sort_values())

运行结果:
在这里插入图片描述

2)降序

设置 ascending=False 倒序

import pandas as pd
import numpy as np

df = pd.Series([5, 3, 2, 4, 1], index=["A", "B", "C", "D", "E"])
print(df)
print(df.sort_values(ascending=False))

运行结果:
在这里插入图片描述

2. DataFrame类型排序

语法格式

sort_values(  # type: ignore[override]
        self,
        by,
        axis: Axis = 0,
        ascending=True,
        inplace: bool = False,
        kind: str = "quicksort",
        na_position: str = "last",
        ignore_index: bool = False,
        key: ValueKeyFunc = None,
    )

常用参数说明

  • by:字符串或者List<字符串>,单列排序或者多列排序
  • ascending:默认为True升序排序,为False降序排序
  • inplace:是否修改原始数据
  • kind:选择排序算法,默认是 ‘quicksort’,该参数只针对单个列时才有效
    • mergesort:归并排序
    • heapsort:堆排序
    • quicksort:快速排序
  • na_position:缺失值处理
    • last:缺失值排最后
    • first:缺失值排开头

1)单列排序

    1. 默认 ascending=True 升序排序
    import pandas as pd
    import numpy as np
    
    data = values = [[4, 7, 3, 1], [5, 3, 9, 8], [4, 1, 8, 5], [6, 2, 3, 5]]
    df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
    print(df)
    print(df.sort_values(by='a'))
    

    运行结果:
    在这里插入图片描述

    1. 设置 ascending=False 倒序
    import pandas as pd
    import numpy as np
    
    data = values = [[4, 7, 3, 1], [5, 3, 9, 8], [4, 1, 8, 5], [6, 2, 3, 5]]
    df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
    print(df)
    print(df.sort_values(by='a',ascending=False))
    

    运行结果:
    在这里插入图片描述

2)多列排序

    1. 两列排序:默认 ascending=True 升序排序
import pandas as pd
import numpy as np

data = values = [[4, 7, 3, 1], [5, 3, 9, 8], [4, 1, 8, 5], [6, 2, 3, 5]]
df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
print(df)
print(df.sort_values(by=['a','b']))

运行结果:
在这里插入图片描述

    1. 两列排序:默认 ascending=False 降序排序
    import pandas as pd
    import numpy as np
    
    data = values = [[4, 7, 3, 1], [5, 3, 9, 8], [4, 1, 8, 5], [6, 2, 3, 5]]
    df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
    print(df)
    print(df.sort_values(by=['a','b'],ascending=False))
    

    运行结果:
    在这里插入图片描述

    1. 两列排序:分别指定排序方法
    import pandas as pd
    import numpy as np
    
    data = values = [[4, 7, 3, 1], [5, 3, 9, 8], [4, 1, 8, 5], [6, 2, 3, 5]]
    df = pd.DataFrame(data, columns=['c', 'a', 'b', 'd'], index=['D', 'B', 'C', 'A'])
    print(df)
    # 分别指定升序和降序
    print(df.sort_values(by=['a','b'], ascending=[True, False]))
    

    运行结果:在这里插入图片描述

3)排序算法

几种排序主要是程序运行时占用的资源和运行速度有差异

在这里插入图片描述

kind:选择排序算法,默认是 ‘quicksort’,该参数只针对单个列时才有效

  • mergesort:归并排序
  • heapsort:堆排序
  • quicksort:快速排序

4)缺失值

na_position:缺失值处理

  • last:缺失值排最后
  • first:缺失值排开头

1、默认 na_position = last 缺失值排最后:

import pandas as pd
import numpy as np

data = {'A': [1, 5, 9, 6, 3],
        'B': [5, 9, 2, np.nan, 3],
        'C': [0, 8, 4, 3, 2],
        }
df = pd.DataFrame(data)
print(df)
print(df.sort_values(by='B'))

运行结果:
在这里插入图片描述
2、设置 na_position = first 缺失值排开头:

import pandas as pd
import numpy as np

data = {'A': [1, 5, 9, 6, 3],
        'B': [5, 9, 2, np.nan, 3],
        'C': [0, 8, 4, 3, 2],
        }
df = pd.DataFrame(data)
print(df)
print(df.sort_values(by='B',na_position = 'first'))

运行结果:
在这里插入图片描述

5)key参数

通过设置 key 参数,可以将列按照特定条件进行排序,对比下下面的排序

import pandas as pd
import numpy as np

data = {'A': ['BB', 'AA', 'DD', 'EE','CC'],
        'B': [5, 9, 2, np.nan, 3],
        'C': [0, 8, 4, 3, 2],
        }
df = pd.DataFrame(data)
print(df.sort_values(by='B'))
# key参数:字符串所有大写字符转化为小写
print(df.sort_values(by='B', key=lambda col: col.str.lower()))

三、排名:rank()

沿轴计算数值数据等级(1到n)。默认情况下,相等的值被分配一个等级,该等级是这些值的等级的平均值。

语法格式

rank(
        self: FrameOrSeries,
        axis=0,
        method: str = "average",
        numeric_only: bool_t | None = None,
        na_option: str = "keep",
        ascending: bool_t = True,
        pct: bool_t = False,
    ) -> FrameOrSeries

最重要的参数就是method,指定排名时用于破坏平级关系的method选项(注:值相同的位同一个分组):

  • average:默认值,在每个组中分配平均排名
  • min:使用整个整个分组的最小排名
  • max: 使用整个分组的最大排名
  • first: 按值在原始数据中的出现顺序分配排名
  • dense:类似于method=‘min’,但组件排名总是加1,而不是一个组中的相等元素的数量

1. method='average’排名

通过“为各组分配一个平均排名”的方式破坏平级关系的为各组分配一个平均排名

import pandas as pd
import numpy as np

df = pd.Series([3, 4, -2, 1, 4, 5])
print(df)
print(df.rank())

运行结果:
在这里插入图片描述

[3, 4, -2, 1, 4, 5],我们手动排一下,-2是第1名,1是第2名,3是第3,4是第4,4是第5,5是第6。其中两个4的排名分别是4和5,在默认的排法,他们平均数4.5,所以两个排名都是4.5。

2. method='min’排名

为各组分配一个最小排名

import pandas as pd
import numpy as np

df = pd.Series([3, 4, -2, 1, 4, 5])
print(df)
print(df.rank(method='min'))

运行结果:
在这里插入图片描述

[3, 4, -2, 1, 4, 5],我们手动排一下,-2是第1名,1是第2名,3是第3,4是第4,4是第5,5是第6。其中两个4的排名分别是4和5,在min排法,他们最小值是4,所以两个排名都是4。

3. method='max’排名

为各组分配一个最大排名,与’min’相反

import pandas as pd
import numpy as np

df = pd.Series([3, 4, -2, 1, 4, 5])
print(df)
print(df.rank(method='max'))

在这里插入图片描述
[3, 4, -2, 1, 4, 5],我们手动排一下,-2是第1名,1是第2名,3是第3,4是第4,4是第5,5是第6。其中两个4的排名分别是4和5,在max排法,他们最大值是5,所以两个排名都是5。

4. method='first’排名

不为各组分配任何排名,不改变原有排名,这种情况下没有小数点,相同的数谁先出现谁就排前面

import pandas as pd
import numpy as np

df = pd.Series([3, 4, -2, 1, 4, 5])
print(df)
print(df.rank(method='first'))

[3, 4, -2, 1, 4, 5],我们手动排一下,-2是第1名,1是第2名,3是第3,4是第4,4是第5,5是第6。其中两个4的排名分别是4和5,在first排法中,相同的数谁先出现谁就排前面。

5. method='dense’排名

为各组分配一个稠密度计算后的排名,它与min唯一的区别就是,重复的不会占坑位,比较常用的排名,比如班级名次,有几个人并列第n名,不影响紧跟着的n+1名。所以dense总是连续的,即组间排名总是+1,不过只是会有重复的而已。

import pandas as pd
import numpy as np

df = pd.Series([3, 4, -2, 1, 4, 5])
print(df)
print(df.rank(method='dense'))

运行结果:
在这里插入图片描述

[3, 4, -2, 1, 4, 5],我们手动排一下,-2是第1名,1是第2名,3是第3,4是第4,4是第5,5是第6。其中两个4的排名分别是4和5,在dense排法中,相同的数不会站坑位,两个4排名都是4,5排名就是5。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

冻结集合:不可能增删frozenset()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 冻结集合&#xff1a;不可能增删 frozenset() 选择题 对于以下python代码表述错误的一项是? a{1,2} print("【显示】a",a) a.add(3) print("【执行】a.add(3)【显示】a"…

【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics)

这节的内容主要讲述机器人动力学的内容。相对于本书其他部分运动学内容相比&#xff0c;把动力学一下子合成了一章。看完以后有三个感受&#xff1a; 1.本章难度相对其他章节较大&#xff0c;因此需要反复去看&#xff0c;以求对重要内容的眼熟&#xff0c;不求全部记住&#…

Java window多环境配置

目录JDK版本下载配置内容描述创建JAVA_HOME在Path配置版本切换效果JDK版本下载 Java8 Download address 这个是Java8 的下载地址&#xff0c;下载是要登录的&#xff0c;自己花费一点时间去注册。如果想要下载其它版本的JDK&#xff0c;请看下面的图&#xff0c;然后你就可以看…

QT数据库-网络编程-打包

目录 一、讲解之前 二、数据库基本操作 三、模糊查询 二、编程之前 三、通信结构 一、设置应用图标&#xff08;熟悉&#xff09; 二、Debug和Release模式&#xff08;掌握&#xff09; 三、动态链接库&#xff08;掌握&#xff09; 四、打包&#xff08;熟悉&#xff09; 一、…

FastDDS(10)Transport Layer传输层

传输层在DDS实体之间提供通信服务,负责通过物理传输实际发送和接收消息。DDS层将此服务用于用户数据和发现流量通信。然而,DDS层本身是独立于传输的,它定义了一个传输API,可以运行在实现该API的任何传输插件上。这样,它就不局限于特定的传输,应用程序可以选择最适合其需求…

公众号开发(4) —— 使用Senparc.Weixin SDK进行模板消息推送

微信公众号支持推送模板消息给特定用户&#xff0c;只要获取到公众号用户的openid向微信提供的接口发送post请求即可向特定用户推送模板消息&#xff0c;以下记录简单记录使用Senparc.Weixin SDK进行模板消息推送的过程。 1 模板消息建立 在微信公众号测试账号中添加如下消息…

数据结构之排序【冒泡排序和快速排序之一的实现及分析】内含动态演示图

引言&#xff1a; 今天分享一下一点小事迹&#xff0c;自从从学校回到家里&#xff0c;我已经好久没睡上一个好觉了&#xff0c;因为真的冷&#xff0c;莫名被窝总是感觉很冷&#xff0c;然后穿着袜袜的脚也是冰凉&#xff0c;所以每次早晨要起床的时候总是感觉非常的冷&#…

shell基础使用

一、hello world 首先建立一个tmux vim test.sh //再创建一个test.sh文件 进入文件后&#xff0c;创建一个如下命令&#xff0c;指明bash为脚本解释器 #! /bin/bash //相当与c头文件echo "hello world"运行方式 1.作为可执行文件 acs9e0ebfcd82d7:~$ chmod x test.s…

我是如何将2千万StackOverflow问答翻译成中文的?

大家好&#xff01;大家觉得如果需要翻译SO上全部问答可以怎么做呢&#xff1f;我讲讲我是怎么的&#xff0c;大家看看做得怎么样。 自我介绍 我是一名有10年开发经验的老程序员。做过大数据&#xff0c;做过Java程序员&#xff0c;也做过算法工程师&#xff0c;目前是一名大厂…

Spring Security的项目中集成JWT Token令牌安全访问后台API

Spring Security的项目中集成JWT Token令牌安全访问后台API引言JWT 简介jwt token 的适用场景jwt 的结构完整jwtjwt 的使用方式客户端获取jwt令牌访问受保护资源的具体流程Spring Security 安全框架下使用jwt token新建一个spring boot项目加入spring security 和 jwt 相关依赖…

五、传输层(二)UDP

目录 2.1 UDP概述 2.2 UDP的首部格式 2.3 UDP校验 2.1 UDP概述 UDP无须建立连接。因此不会引入建立连接的时延。 UDP为无连接状态。因此当服务器使用UDP时&#xff0c;一般能支持更多的活动客户机。 UDP分组首部仅有8B的开销&#xff0c;而TCP有20B的首部开销。 应用层…

后端思维篇:如何抽个上报模板

前言 大家好&#xff0c;我是田螺。 我的后端思维专栏好久没更新啦&#xff0c;本文是后端思维专栏的第六篇哈。我的整个后端思维专栏都是跟日常工作相关的哈。 最近刚好优化了安全上报这块的代码&#xff0c;抽了一个基础模板&#xff0c;看起来挺优雅的。所以今天手把手教…

〖产品思维训练白宝书 - 产品思维认知篇⑤〗- 学习 [产品思维] 需要做哪些准备?

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

php wampserver的使用配置

php wampserver的使用配置wampserver1.php时区配置2.修改apache服务器端口号3.设置起始页4.设置web服务器主目录5.设置虚拟目录wampserver WampServer是Windows Apache Mysql PHP集成安装环境&#xff0c;在Windows操作系统下的apache、php和mysql的服务器软件。 1.php时区配…

RabbitMQ 第二天 高级 7 RabbitMQ 高级特性 7.2 Consumer Ack

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级7 RabbitMQ 高级特性7.2 Consumer Ack7.2.1 Consumer Ack7.2.2 Consumer Ack 小结7.2.3 消息可靠性总结第二天 高级 7 RabbitMQ 高级特性 7.2 Consumer Ack 7.2.…

12.25日周报

周报 代码行数&#xff1a; 周一 704 周二 481 周三 571 周四 589 周五 595 周六 520 周日 537 遇到的问题&#xff1a; 没用过的方法AtomicInteger Insert Proto currentTimeMillis RequestParam BufferedReader UriComponents RestTemplate OSS 不清楚在…

公众号开发(2) —— 盛派.net SDK + vue搭建微信公众号网页开发框架

需求&#xff1a;通过微信公众号菜单跳转到手机端网页&#xff0c;跳转后通过微信授权登录获取微信公众号用户的OpenId&#xff08;用户关注公众号后&#xff0c;用户在公众号的唯一凭证&#xff09;&#xff0c;通过OpenId和后台数据库用户信息绑定起来并实现一些业务逻辑。 技…

基于51单片机的电子闹钟设计

使用的单片机是 STC89C52 此设计可以 年 月 日 时 分 秒显示和闹钟功能 能通过8个按键自由调整 时 分 秒 闹钟响铃时间 带复位按键&#xff0c;要是模块抽风&#xff0c;摁复位按键即可&#xff01; 使用 LCD16020A 屏幕显示 屏幕电路设有电位器&#xff…

Tableau可视化设计案例-07 多边形地图和背景图地图

Tableau可视化设计案例 本文是Tableau的案例&#xff0c;为B站视频的笔记&#xff0c;B站视频 参考&#xff1a;https://www.bilibili.com/video/BV1E4411B7ef 参考&#xff1a;https://blog.csdn.net/lianjiabin/category_9826951.html 数据下载地址为&#xff1a;https://do…

Java项目:springboot药品管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目属于前后端分离的项目&#xff0c;分为两个角色药品管理员和取药处人员 药品管理员&#xff1a; 登录、退出、药品信息录入、药厂信息录入…