pandas 中如何按行或列的值对数据排序?

这篇具有很好参考价值的文章主要介绍了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
Name course1 course2 sport
1 Paul 85 90 basketball
2 Richard 83 82 Volleyball
3 Betty 90 79 football
4 Philip 84 71 Basketball
5 Anna 85 86 baseball

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

df_sort=df_col.sort_values(by='course2')
df_sort
Name course1 course2 sport
4 Philip 84 71 Basketball
3 Betty 90 79 football
2 Richard 83 82 Volleyball
5 Anna 85 86 baseball
1 Paul 85 90 basketball

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

df_sort=df_col.sort_values(by='course2',ascending=False)
df_sort
Name course1 course2 sport
1 Paul 85 90 basketball
5 Anna 85 86 baseball
2 Richard 83 82 Volleyball
3 Betty 90 79 football
4 Philip 84 71 Basketball
2. 按多列的值对数据排序

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

df_sort=df_col.sort_values(by='course1')
df_sort
Name course1 course2 sport
2 Richard 83 82 Volleyball
4 Philip 84 71 Basketball
1 Paul 85 90 basketball
5 Anna 85 86 baseball
3 Betty 90 79 football

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

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

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

df_sort=df_col.sort_values(by=['course1','course2'])
df_sort
Name course1 course2 sport
2 Richard 83 82 Volleyball
4 Philip 84 71 Basketball
5 Anna 85 86 baseball
1 Paul 85 90 basketball
3 Betty 90 79 football

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

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

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

df_sort=df_col.sort_values(by=['sport'])
df_sort
Name course1 course2 sport
4 Philip 84 71 Basketball
2 Richard 83 82 Volleyball
5 Anna 85 86 baseball
1 Paul 85 90 basketball
3 Betty 90 79 football

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

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

df_sort=df_col.sort_values(by=['sport'],key=lambda col:col.str.lower())
df_sort
Name course1 course2 sport
5 Anna 85 86 baseball
1 Paul 85 90 basketball
4 Philip 84 71 Basketball
3 Betty 90 79 football
2 Richard 83 82 Volleyball

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

4. 修改原数据

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

df_col
Name course1 course2 sport
1 Paul 85 90 basketball
2 Richard 83 82 Volleyball
3 Betty 90 79 football
4 Philip 84 71 Basketball
5 Anna 85 86 baseball

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

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

df_col.sort_values(by='course2',inplace=True)
df_col
Name course1 course2 sport
4 Philip 84 71 Basketball
3 Betty 90 79 football
2 Richard 83 82 Volleyball
5 Anna 85 86 baseball
1 Paul 85 90 basketball

二、 按行的值对数据排序

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

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
course1 course2 course3
Paul 91 72 93
Richard 85 81 85
Betty 90 76 88
Philip 84 71 94
Anna 92 79 86

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

df_sort=df_row.sort_values(by='Anna',axis=1)
df_sort
course2 course3 course1
Paul 72 93 91
Richard 81 85 85
Betty 76 88 90
Philip 71 94 84
Anna 79 86 92

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

df_sort=df_row.sort_values(by=['Richard','Paul'],axis=1,ascending=False)
df_sort
course3 course1 course2
Paul 93 91 72
Richard 85 85 81
Betty 88 90 76
Philip 94 84 71
Anna 86 92 79

参考

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

本文对您有帮助的话,请点赞支持一下吧,谢谢!

关注我 宁萌Julie,互相学习,多多交流呀!文章来源地址https://www.toymoban.com/news/detail-604586.html

到了这里,关于pandas 中如何按行或列的值对数据排序?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab:删除矩阵的行或列

    Matlab:删除矩阵的行或列 在使用Matlab进行数据处理和分析时,常常需要对矩阵进行操作。有时候需要从矩阵中删除一些行或列,以便于后续的处理。本文将介绍如何在Matlab中删除矩阵的行或列,并提供相应的源代码。 删除矩阵的行 要删除矩阵的行,可以使用Matlab内置的函数

    2024年02月12日
    浏览(55)
  • Matlab: 删除矩阵中的行或列

    在Matlab中,您可以使用简单的代码来删除矩阵中的行或列。删除行或列对于数据预处理和矩阵操作非常有用。本文将向您展示如何使用Matlab来实现这一操作。 删除行: 要删除矩阵中的特定行,您可以使用Matlab中的索引操作符来选择要保留的行。以下是删除行的示例代码:

    2024年02月04日
    浏览(78)
  • Matlab:从矩阵中删除行或列

    A = 4×4 A = 3×4 现在删除第三列。

    2024年02月10日
    浏览(41)
  • Vue Emelent-UI表格合并行或列rowspan和colspan的作用

    Vue Element-UI的table组件支持合并行或者列,在这里做个简单的学习笔记。 我们可以通过rowspan和colspan来进行单元格合并,那么这两个属性是什么意思呢,通过官方给的demo来探讨下。 上述单元格将行index为奇数的第一列和第二列合并为一个单元格:效果就是展示第一列的内容,

    2024年02月16日
    浏览(41)
  • vue3中el-table实现多表头并表格合并行或列

    1、el-table中添加事件 :span-method=\\\"genderSpanCity\\\" 2、js添加函数 效果图为

    2024年01月23日
    浏览(54)
  • 【clickhouse笔记】 查询表或列的磁盘占用大小

    通过系统表 system.parts 我们可以查询MergeTree表的磁盘占用信息,而通过 system_part_columns 表可以查询具体字段的磁盘占用信息 示例:以下SQL 查询所有表的 磁盘压缩大小 和 原始未压缩磁盘占用、压缩比等信息 示例:以下SQL 查询所有表的所有字段的磁盘压缩大小 和 原始未压缩磁盘

    2024年02月21日
    浏览(49)
  • Python pandas库怎样根据某一列的数据将所有数据分类

    在数据处理中,数据分类是一项基础而重要的工作。本文将介绍如何使用Python pandas库,根据某一列的数据将所有数据分类。 1. 读取数据文件,生成数据框(DataFrame)对象 首先,需要读取数据文件,生成数据框(DataFrame)对象。这里以读取CSV格式的数据文件为例,代码如下:

    2024年02月07日
    浏览(46)
  • 如何在Pandas中根据条件替换列中的值?

    在使用Pandas的Python中,DataFrame列中的值可以通过使用各种内置函数根据条件进行替换。在本文中,我们将讨论在Pandas中用条件替换数据集列中的值的各种方法。 1. 使用dataframe.loc方法 使用此方法,我们可以使用条件或布尔数组访问一组行或列。如果我们可以访问它,我们也可

    2024年01月16日
    浏览(39)
  • web前端之拖拽API、上传多图片时拖拽排序、表格行或列拖拽排序、复制元素跨区域放置、拖放、投掷、若依、vuedraggable、sortablejs、element、plus、vue、ui

    前言 vue3+element-puls列表行、列拖拽的需求,想找一个成熟的解决方法。但发现vue3的比较少,所以就把这个分享出来,希望可以帮助到大家。vuedraggable是一款vue3的拖拽插件,基于sortable.js实现,可以用来拖拽列表、菜单、工作台、选项卡等常见的工作场景。安装的是vuedraggabl

    2024年01月22日
    浏览(45)
  • 【pandas】Python读取DataFrame的某行或某列

    行索引(index) :对应最左边那一竖列 列索引(columns) :对应最上面那一横行 .loc[]官方释义: Access a group of rows and columns by label(s) or a boolean array.(通过标签或布尔数组访问一组行和列) 官方链接 loc使用索引来取值,基础用法 df.loc[[行索引],[列索引]] .iloc[]官方释义: Purely inte

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包