pandas中按行或列的值对数据排序的实现

 更新时间:2023年02月27日 09:25:36   作者:宁萌Julie  
本文主要介绍了pandas中按行或列的值对数据排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在处理表格型数据时,常会用到排序,比如,按某一行或列的值对表格排序,要怎么做呢?

这就要用到 pandas 中的 sort_values() 函数。

一、 按列的值对数据排序

先来看最常见的情况。

1.按某一列的值对数据排序

以下面的数据为例。

import pandas as pd
df_col = pd.DataFrame({'Name':['Paul','Richard', 'Betty',  'Philip','Anna'],
        'course1':[85,83,90,84,85],
        'course2':[90,82,79,71,86],
        'sport':['basketball', 'Volleyball', 'football', 'Basketball','baseball']},
         index=[1,2,3,4,5])  
df_col
Namecourse1course2sport
1Paul8590basketball
2Richard8382Volleyball
3Betty9079football
4Philip8471Basketball
5Anna8586baseball

在 sort_values() 函数中设置 by='列名',即可以按这一列值的顺序重新排列行。

df_sort=df_col.sort_values(by='course2')
df_sort
Namecourse1course2sport
4Philip8471Basketball
3Betty9079football
2Richard8382Volleyball
5Anna8586baseball
1Paul8590basketball

如以上结果所示,默认是升序排列。还可以做降序排列,在 sort_values() 函数中设置 ascending=False 即可。例如:

df_sort=df_col.sort_values(by='course2',ascending=False)
df_sort
Namecourse1course2sport
1Paul8590basketball
5Anna8586baseball
2Richard8382Volleyball
3Betty9079football
4Philip8471Basketball

2. 按多列的值对数据排序

您是否遇到过这种情况:要排序的某一列数据有相同的值,此时结果会怎么样呢?我们来看下面的例子。

df_sort=df_col.sort_values(by='course1')
df_sort
Namecourse1course2sport
2Richard8382Volleyball
4Philip8471Basketball
1Paul8590basketball
5Anna8586baseball
3Betty9079football

从结果看到,“course1” 有两个相同的值 85,此时会依据 index 的先后顺序排列。

那如果不想按 index 顺序,想要自己设定相同值的排序方式,应该怎么做呢?

可以设置第二列,对于第一列的相同值,参照第二列的值排序。例如:

df_sort=df_col.sort_values(by=['course1','course2'])
df_sort
Namecourse1course2sport
2Richard8382Volleyball
4Philip8471Basketball
5Anna8586baseball
1Paul8590basketball
3Betty9079football

可以看到,by 参数中的第二列 “course2” 只在第一列 “course1” 中有相同值时起作用,因此只有 “Anna” 和 “Paul” 所在的这两行数据位置互换,其它行位置不变。

3. key 参数:设置排序时的数据变换函数

在实际中还可能会遇到这种情况,数据中大小写都有,比如例子数据的 “sport” 列。按这一列对数据排序,结果如下:

df_sort=df_col.sort_values(by=['sport'])
df_sort
Namecourse1course2sport
4Philip8471Basketball
2Richard8382Volleyball
5Anna8586baseball
1Paul8590basketball
3Betty9079football

看结果发现,大写字母排在小写字母前面,因此 “Volleyball” 所在行排在 “baseball” 所在行前面,但这并不是我们想要的排序结果。那应该怎么做,才能按字母顺序排序呢?

可以设置 sort_values() 函数的 key 参数。

df_sort=df_col.sort_values(by=['sport'],key=lambda col:col.str.lower())
df_sort
Namecourse1course2sport
5Anna8586baseball
1Paul8590basketball
4Philip8471Basketball
3Betty9079football
2Richard8382Volleyball

此时的排序结果就是按字母顺序排列。

4. 修改原数据

前面介绍的操作中,每次都生成了一个新的数据 df_sort,并没有改变原数据。

df_col
Namecourse1course2sport
1Paul8590basketball
2Richard8382Volleyball
3Betty9079football
4Philip8471Basketball
5Anna8586baseball

但是,有时可能数据太大,而原数据后续不再使用。为了节省空间,想直接在原数据上改动。应该怎么办呢?

只要在 sort_values() 函数中设置 inplace=True。

df_col.sort_values(by='course2',inplace=True)
df_col
Namecourse1course2sport
4Philip8471Basketball
3Betty9079football
2Richard8382Volleyball
5Anna8586baseball
1Paul8590basketball

二、 按行的值对数据排序

需要注意的是,这种情况只适用于各列数据类型相同的情况,例如下面例子中的数据,每一列数据都是数值型。而前面例子的数据既有数值型,又有字符型,无法按行的值排序。

df_row = pd.DataFrame({
        'course1':[91,85,90,84,92],
        'course2':[72,81,76,71,79],
        'course3':[93,85,88,94,86]},
         index=['Paul','Richard', 'Betty',  'Philip','Anna'])
df_row
course1course2course3
Paul917293
Richard858185
Betty907688
Philip847194
Anna927986

按行的值排序时,设置 by 参数为某行的 index 名,并且 axis=1。

df_sort=df_row.sort_values(by='Anna',axis=1)
df_sort
course2course3course1
Paul729391
Richard818585
Betty768890
Philip719484
Anna798692

按行值排序在 sort_values() 函数中设置 ascending, key, inplace 等参数的方式都与前面介绍的按列值排序相同。这里仅以按多行的值对数据排序为例。

df_sort=df_row.sort_values(by=['Richard','Paul'],axis=1,ascending=False)
df_sort
course3course1course2
Paul939172
Richard858581
Betty889076
Philip948471
Anna869279

参考

1.https://www.geeksforgeeks.org/sort-rows-or-columns-in-pandas-dataframe-based-on-values/#courses

2.https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html

到此这篇关于pandas中按行或列的值对数据排序的实现的文章就介绍到这了,更多相关pandas 按行或列的值对数据排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3.x对JSON的一些操作示例

    Python3.x对JSON的一些操作示例

    最近在学习python3,正巧遇到了一些json的操作,索性整理一下分享出来,下面这篇文章主要给大家介绍了关于Python3.x对JSON的一些操作,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-09-09
  • 一个计算身份证号码校验位的Python小程序

    一个计算身份证号码校验位的Python小程序

    闲着无事,便想写个实用点的Python小程序,如何计算机身份证号码的校验位,这样的文章在网上一抓一大把,这里仅简单介绍下吧
    2014-08-08
  • django组合搜索实现过程详解(附代码)

    django组合搜索实现过程详解(附代码)

    这篇文章主要介绍了django组合搜索实现过程详解(附代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python开发宝典CSV JSON数据处理技巧详解

    Python开发宝典CSV JSON数据处理技巧详解

    在Python中处理CSV和JSON数据时,需要深入了解这两种数据格式的读取、写入、处理和转换方法,下面将详细介绍如何在Python中处理CSV和JSON数据,并提供一些示例和最佳实践
    2023-11-11
  • 对于Python异常处理慎用“except:pass”建议

    对于Python异常处理慎用“except:pass”建议

    这篇文章主要介绍了对于Python异常处理方法的建议,摘选自StackOverflow上的热门问题的回答,阐述了except:pass的使用时需要注意的地方,需要的朋友可以参考下
    2015-04-04
  • Python中关于集合的介绍与常规操作解析

    Python中关于集合的介绍与常规操作解析

    Python除了List、Tuple、Dict等常用数据类型外,还有一种数据类型叫做集合(set),集合的最大特点是:集合里边的元素是不可重复的并且集合内的元素还是无序的
    2021-09-09
  • python计算列表内各元素的个数实例

    python计算列表内各元素的个数实例

    今天小编就为大家分享一篇python计算列表内各元素的个数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 通俗讲解python 装饰器

    通俗讲解python 装饰器

    这篇文章主要介绍了python 装饰器的相关资料,帮助大家更好的理解和学习python装饰器的相关知识,感兴趣的朋友可以了解下
    2020-09-09
  • Python如何读取json文件

    Python如何读取json文件

    这篇文章主要介绍了Python如何读取json文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • python中turtle库的简单使用教程

    python中turtle库的简单使用教程

    这篇文章主要给大家介绍了关于python中turtle库的简单使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论