欢迎访问WDPHP素材源码!今天是2024年04月29日 星期一,上午工作顺利吗?
您好,游客 [ 马上登录 | 注册帐号 | 微信登录 | QQ登录]
当前位置:首页 > 教程 > 其他教程 > 

pandas中按行或列的值对数据排序如何实现
栏目分类:其他教程    发布日期:2023-08-20    浏览次数:378次     收藏

本文小编为大家详细介绍“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

    相关热词: pandas数据排序实现

    源码 模板 特效 素材 资源 教程 站长