DataFrame(13):DataFrame的排序与排名问题_dataframe 排序-程序员宅基地

技术标签: pandas  python  python排序  sort_index  sort_value  

1、说明

  DataFrame中的排序分为两种,一种是对索引排序,一种是对值进行排序。
  索引排序:sort_index();值排序:sort_values();值排名:rank()
  对于索引排序,涉及到对行索引、列索引的排序,并且还涉及到是升序还是降序。函数df.sort_index(axis= , ascending= , inplace=),需要特别注意这三个参数。axis表示对行操作,还是对列操作;ascending表示升序,还是降序操作。
  对于值排序,同样也是涉及到行、列排序问题,升序、降序排列问题。函数df.sort_values(by= , axis= , ascending= , inplace=),也需要特别注意这几个参数,只是多了一个by操作,需要我们指明是按照哪一行或哪一列,进行排序的。
  注意:axis=0表示对行操作,axis=1表示对列进行操作;ascending=True表示升序,ascending=False表示降序;inplace=True表示对原始DataFrame本身操作,因此不需要赋值操作,inplace=False相当于是对原始DataFrame的拷贝,之后的一些操作都是针对这个拷贝文件进行操作的,因此需要我们赋值给一个变量,保存操作后的结果。

2、索引排序:df.sort_index()
① 对行索引,进行升序排列
df = pd.DataFrame({
    "A":[1,3,5,7,9],
                   "D":[1,2,3,4,5],
                   "C":[3,6,9,12,15],
                   "B":[2,4,6,8,10]},
                   index=list("acbed"))
display(df)
display(id(df))

df.sort_index(axis=0,ascending=True,inplace=True)
display(df)
display(id(df))

df1 = df.sort_index(axis=0,ascending=True)
display(df1)
display(id(df1))

结果如下:
在这里插入图片描述

② 对列索引,进行降序排列
df = pd.DataFrame({
    "A":[1,3,5,7,9],
                   "D":[1,2,3,4,5],
                   "C":[3,6,9,12,15],
                   "B":[2,4,6,8,10]},
                   index=list("acbed"))
display(df)

df.sort_index(axis=1,ascending=False,inplace=True)
display(df)

结果如下:
在这里插入图片描述

3、值排序:df.sort_values()
① 对某一列进行升序排列(有实际意义)
df = pd.DataFrame({
    "A":[3,1,5,9,7],
                   "D":[4,1,2,5,3],
                   "C":[3,15,9,6,12],
                   "B":[2,4,6,10,8]},
                   index=list("acbed"))
display(df)

df.sort_values(by="A",axis=0,ascending=True,inplace=True)
display(df)

结果如下:
在这里插入图片描述

② 对某一行进行降序排列(实际意义不大)
df = pd.DataFrame({
    "A":[3,1,5,9,7],
                   "D":[4,1,2,5,3],
                   "C":[3,15,9,6,12],
                   "B":[2,4,6,10,8]},
                   index=list("acbed"))
display(df)

df.sort_values(by="A",axis=1,ascending=False,inplace=True)
display(df)

结果如下:
在这里插入图片描述

③ 对多列进行联合排序(重要)
df = pd.DataFrame({
    "A":[3,1,3,9,7],
                   "D":[666,1,888,5,3],
                   "C":[3,15,9,6,12],
                   "B":[2,4,6,10,8]},
                   index=list("acbed"))
display(df)

df.sort_values(by=["A","D"],axis=0,ascending=[True,False],inplace=True)
df

结果如下:
在这里插入图片描述
注意:上图中,我们分别按照A和D这个列进行排序,先按照A列做升序排列,当A列中具有相同值的时候,就按照D列做降序排列。

4、sort_values()中的na_position参数

  na_position参数用于设定缺失值的显示位置,first表示缺失值显示在最前面;last表示缺失值显示在最后面。

df = pd.DataFrame({
    "A":[10,8,np.nan,2,4],
                   "D":[1,7,5,3,8],
                   "B":[5,2,8,4,1]},
                   index=list("abcde"))
display(df)

df.sort_values(by="A",axis=0,inplace=True,na_position="first")
display(df)

df.sort_values(by="A",axis=0,inplace=True,na_position="last")
display(df)

结果如下:
在这里插入图片描述

5、“值排名”:rank()函数
1)rank()函数的常用参数说明

在这里插入图片描述

2)原始数据
x = {
    "name":["张三","李四","王五","赵六","郑七","陈八","黄九","孙十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

结果如下:
在这里插入图片描述

3)rank()函数使用如下
① method=“first”
x = {
    "name":["张三","李四","王五","赵六","郑七","陈八","黄九","孙十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

df["排名"] = df["sales"].rank(method="first")
display(df)

结果如下:
在这里插入图片描述

② method=“min”
x = {
    "name":["张三","李四","王五","赵六","郑七","陈八","黄九","孙十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

df["排名"] = df["sales"].rank(method="min")
display(df)

结果如下:
在这里插入图片描述

③ method=“max”
x = {
    "name":["张三","李四","王五","赵六","郑七","陈八","黄九","孙十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

df["排名"] = df["sales"].rank(method="max")
display(df)

结果如下:
在这里插入图片描述

④ method=“average”
x = {
    "name":["张三","李四","王五","赵六","郑七","陈八","黄九","孙十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

df["排名"] = df["sales"].rank(method="average")
display(df)

结果如下:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41261833/article/details/104167592

智能推荐

flask 操作数据时,db的要在app.config设置之后声明:如app.config['SQLALCHEMY_DATABASE_URI'] --...-程序员宅基地

文章浏览阅读3.2k次。flask 操作数据时,db的要在app.config设置之后声明:如app.config['SQLALCHEMY_DATABASE_URI']否则,运行程序时app.config里面做的设置就不会生效,就会提示各种参数没做设置因为db在声明的时候解释器就会去读数据库URI的值,如果此时没有读到,后面设置了也不会去读了#encoding=utf-8#fro..._app.config['sqlalchemy_database_uri']

Mac10.x以上系统安装telnet命令_mac 安装 telnet unable to connect to remote host-程序员宅基地

文章浏览阅读3.7k次,点赞4次,收藏5次。坑啊,mac10.x以上版本没有了telnet命令,对于用习惯了telnet命令查看远程ip port是否启动的我来说好不习惯。mac好像没有yum之类的命令,查询需要执行brew install telnet,结果brew命令也没有,查询了半天各种解决方案,终于看到一个可行的,记录一下流程,方便哪天又不行了。 折腾我好久一定要记录一下。1、安装brew在mac终端执行命令:/usr/bin/ruby -e "$(curl -fsSL https://ra..._mac 安装 telnet unable to connect to remote host

Linux终端打开后命令行显示sh-4.2$的一个解决方法-程序员宅基地

文章浏览阅读7.3k次。出现这个问题后百度了一圈下来都是说在home下缺少bash_*文件造成的,但是home下是有这些文件的,所以应该不是这个问题。检查创建用户命令发现用到了-s /usr/bin/sh把用户的shell指定成了sh而不是bash,所以需要修改用户的shell,执行以下命令,问题解决usermod -s /bin/bash name..._sh-4.2$

数据结构-交换排序_顺序结构数值交换-程序员宅基地

文章浏览阅读788次。1.冒泡排序冒泡排序:重复遍历数据序列,依次比较两个相邻的元素,如果它们的顺序颠倒,就把他们交换过来。具体方法:(升序)比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要..._顺序结构数值交换

GPT2-Chinese 文本生成,训练AI写小说,AI写小说2_gpt-chinese-程序员宅基地

文章浏览阅读8.2k次,点赞8次,收藏67次。在根目录(目录\GPT2-Chinese\)下建立文件夹data 和modeldatamodel。_gpt-chinese

ZOJ 3329 One Person Game 概率DP 期望 难度:2-程序员宅基地

文章浏览阅读77次。http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754本题分数为0的概率不确定,所以不能从0这端出发.设E[i]为到达成功所需的步数,明显i>n时E[i]=0,当0<i<=n时E[i]=sigma(E[i+k]*pk)+E[0]*p0,(k是可以投出的除了恰为a,b,c以外的骰子之和),在这个公式..._one person game c++ 难度

随便推点

使用 Python 爬取网页数据-程序员宅基地

文章浏览阅读810次。1. 使用 urllib.request 获取网页urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 HTML 解析库, 可以编写出用于采集网络数据的大型爬虫;注: 示例代码使用Python3编写; urllib 是 Python2 中 urllib 和 urllib2 两个库合并而..._python爬虫网站代码

tomcat启动成功但是无法访问8080页面_tomcat启动正常,访问不到8080-程序员宅基地

文章浏览阅读8.8k次,点赞7次,收藏47次。tomcat启动成功,但是访问页面的时候被拒绝1.首先在浏览器输入http://localhost查看localhost能否访问,如果不是下图则需要修改电脑配置。1.1进入电脑目录:控制面板\所有控制面板项\程序和功能,双击:打开或关闭windows功能1.2在internet信息服务下,勾选这三个选项。再去浏览器输入:http://localhost访问就能出现loaclhost的访问页面2.localhost访问成功,但是localhost:8080访问失败。2.1双击eclipse下._tomcat启动正常,访问不到8080

基于Hadoop大数据技术和协同过滤算法的就业推荐系统_基于hadoop的协同过滤算法的博客推荐系统与分析-程序员宅基地

文章浏览阅读3.2k次,点赞7次,收藏59次。基于Hadoop大数据技术和协同过滤算法的就业推荐系统_基于hadoop的协同过滤算法的博客推荐系统与分析

kinect v1深度相机介绍以及ubuntu16.04下的使用-程序员宅基地

文章浏览阅读4.5k次,点赞3次,收藏45次。kinect-v1深度相机介绍以及ubuntu16.04下的使用_kinect v1

程序员之间最丧心病狂的鄙视链——编程语言篇_编程语言鄙视链表情包-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏4次。编程语言工程师之间疯狂的鄙视链。_编程语言鄙视链表情包

如何在onMouseDown事件中判断按下的是鼠标左键还是右键_mousedown 判断左右键-程序员宅基地

文章浏览阅读1.4w次。比如在OnMouseDown里吧,有一个参数是Button,他代表了是由哪个鼠标按键引发的这个事件,而Shift则说明了此时按键们的状态(不但包括左键,右键,还有alt,ctrl等键盘按键,具体可以看TShiftState的定义,在Classes.hpp里)。 代码如下,如果显示L,表示左键按下了,显示R,表示右键按下了,都显示就都按下了。 void __fastcall _mousedown 判断左右键

推荐文章

热门文章

相关标签