溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

pandas中按行或列的值對數(shù)據(jù)排序如何實現(xiàn)

發(fā)布時間:2023-02-27 10:53:03 來源:億速云 閱讀:90 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細介紹“pandas中按行或列的值對數(shù)據(jù)排序如何實現(xiàn)”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當(dāng),希望這篇“pandas中按行或列的值對數(shù)據(jù)排序如何實現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

    在處理表格型數(shù)據(jù)時,常會用到排序,比如,按某一行或列的值對表格排序,要怎么做呢?

    這就要用到 pandas 中的 sort_values() 函數(shù)。

    一、 按列的值對數(shù)據(jù)排序

    先來看最常見的情況。

    1.按某一列的值對數(shù)據(jù)排序

    以下面的數(shù)據(jù)為例。

    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() 函數(shù)中設(shè)置 by='列名',即可以按這一列值的順序重新排列行。

    df_sort=df_col.sort_values(by='course2')
    df_sort

    Namecourse1course2sport
    4Philip8471Basketball
    3Betty9079football
    2Richard8382Volleyball
    5Anna8586baseball
    1Paul8590basketball

    如以上結(jié)果所示,默認是升序排列。還可以做降序排列,在 sort_values() 函數(shù)中設(shè)置 ascending=False 即可。例如:

    df_sort=df_col.sort_values(by='course2',ascending=False)
    df_sort

    Namecourse1course2sport
    1Paul8590basketball
    5Anna8586baseball
    2Richard8382Volleyball
    3Betty9079football
    4Philip8471Basketball

    2. 按多列的值對數(shù)據(jù)排序

    您是否遇到過這種情況:要排序的某一列數(shù)據(jù)有相同的值,此時結(jié)果會怎么樣呢?我們來看下面的例子。

    df_sort=df_col.sort_values(by='course1')
    df_sort

    Namecourse1course2sport
    2Richard8382Volleyball
    4Philip8471Basketball
    1Paul8590basketball
    5Anna8586baseball
    3Betty9079football

    從結(jié)果看到,“course1” 有兩個相同的值 85,此時會依據(jù) index 的先后順序排列。

    那如果不想按 index 順序,想要自己設(shè)定相同值的排序方式,應(yīng)該怎么做呢?

    可以設(shè)置第二列,對于第一列的相同值,參照第二列的值排序。例如:

    df_sort=df_col.sort_values(by=['course1','course2'])
    df_sort

    Namecourse1course2sport
    2Richard8382Volleyball
    4Philip8471Basketball
    5Anna8586baseball
    1Paul8590basketball
    3Betty9079football

    可以看到,by 參數(shù)中的第二列 “course2” 只在第一列 “course1” 中有相同值時起作用,因此只有 “Anna” 和 “Paul” 所在的這兩行數(shù)據(jù)位置互換,其它行位置不變。

    3. key 參數(shù):設(shè)置排序時的數(shù)據(jù)變換函數(shù)

    在實際中還可能會遇到這種情況,數(shù)據(jù)中大小寫都有,比如例子數(shù)據(jù)的 “sport” 列。按這一列對數(shù)據(jù)排序,結(jié)果如下:

    df_sort=df_col.sort_values(by=['sport'])
    df_sort

    Namecourse1course2sport
    4Philip8471Basketball
    2Richard8382Volleyball
    5Anna8586baseball
    1Paul8590basketball
    3Betty9079football

    看結(jié)果發(fā)現(xiàn),大寫字母排在小寫字母前面,因此 “Volleyball” 所在行排在 “baseball” 所在行前面,但這并不是我們想要的排序結(jié)果。那應(yīng)該怎么做,才能按字母順序排序呢?

    可以設(shè)置 sort_values() 函數(shù)的 key 參數(shù)。

    df_sort=df_col.sort_values(by=['sport'],key=lambda col:col.str.lower())
    df_sort

    Namecourse1course2sport
    5Anna8586baseball
    1Paul8590basketball
    4Philip8471Basketball
    3Betty9079football
    2Richard8382Volleyball

    此時的排序結(jié)果就是按字母順序排列。

    4. 修改原數(shù)據(jù)

    前面介紹的操作中,每次都生成了一個新的數(shù)據(jù) df_sort,并沒有改變原數(shù)據(jù)。

    df_col

    Namecourse1course2sport
    1Paul8590basketball
    2Richard8382Volleyball
    3Betty9079football
    4Philip8471Basketball
    5Anna8586baseball

    但是,有時可能數(shù)據(jù)太大,而原數(shù)據(jù)后續(xù)不再使用。為了節(jié)省空間,想直接在原數(shù)據(jù)上改動。應(yīng)該怎么辦呢?

    只要在 sort_values() 函數(shù)中設(shè)置 inplace=True。

    df_col.sort_values(by='course2',inplace=True)
    df_col

    Namecourse1course2sport
    4Philip8471Basketball
    3Betty9079football
    2Richard8382Volleyball
    5Anna8586baseball
    1Paul8590basketball

    二、 按行的值對數(shù)據(jù)排序

    需要注意的是,這種情況只適用于各列數(shù)據(jù)類型相同的情況,例如下面例子中的數(shù)據(jù),每一列數(shù)據(jù)都是數(shù)值型。而前面例子的數(shù)據(jù)既有數(shù)值型,又有字符型,無法按行的值排序。

    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

    按行的值排序時,設(shè)置 by 參數(shù)為某行的 index 名,并且 axis=1。

    df_sort=df_row.sort_values(by='Anna',axis=1)
    df_sort

    course2course3course1
    Paul729391
    Richard818585
    Betty768890
    Philip719484
    Anna798692

    按行值排序在 sort_values() 函數(shù)中設(shè)置 ascending, key, inplace 等參數(shù)的方式都與前面介紹的按列值排序相同。這里僅以按多行的值對數(shù)據(jù)排序為例。

    df_sort=df_row.sort_values(by=['Richard','Paul'],axis=1,ascending=False)
    df_sort

    course3course1course2
    Paul939172
    Richard858581
    Betty889076
    Philip948471
    Anna869279

    讀到這里,這篇“pandas中按行或列的值對數(shù)據(jù)排序如何實現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI