开发者

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

开发者 https://www.devze.com 2023-02-28 09:43 出处:网络 作者: 宁萌Julie
目录一、 按列的值对数据排序1.按某一列的值对数据排序2. 按多列的值对数据排序3. key 参数:设置排序时的数据变换函数4. 修改原数据二、 按行的值对数据排序参考在处理表格型数据时,常会用到排序,比如,按某一行或
目录
  • 一、 按列的值对数据排序
    • 1.按某一列的值对数据排序
    • 2. 按多列的值对数据排序
    • 3. key 参数:设置排序时的数据变换函数
    • 4. 修改原数据
  • 二、 按行的值对数据排序
    • 参考

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

      这就要用到 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” 所在的这两行数据位置互换,其它行位置不变android

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

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

      df_sort=df_col.sort_values(by=['sport'])
      df_sort
      
      Namecourse1course2sport
      4Philip8471Basketball
      2Richard8382Vjsolleyball
      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
      
      Namecourse1cour编程客栈se2sport
      1Paul8590basketball
      2Richard8382Volleyball
      3Betty9079football
      4Philip8471Basketball
      5Anna8586baseball

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

      只要在 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,ascendjsing=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 按行或列的值对数据排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号