亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Pandas 排序和排名操作

1. 前言

上一小節,我們學習了 Pandas 庫對于多個數據集的連接和合并操作,滿足了我們在數據行和列上的內容擴展需要,除了這點,我們很多時候也需要對某個數據集中的數據進行排序操作,按照遞增或者遞減的方式將數據依據某個條件進行排序,Pandas 庫針對這樣一個較為常見的數據處理需求,又提供了怎樣的操作方式呢?

本節我們將一起學習 Pandas 庫中對于數據的排序操作,分為按索引排序和按數據值進行排序,除了排序功能,Pandas 還提供了排名的操作,接下來我們一起學習 Pandas 庫的排序和排名操作吧。

2. Pandas 排序操作

Pandas 對于排序的操作分為按索引排序和按數據值排序,分別通過函數 sort_index () 和 sort_values () 進行實現,接下來我們詳細學習每個函數的使用方式。首先我們通過 Excel 進行數據的解析。

圖片描述

Pandas 解析的數據對象 data 具體內容如下:

# 導入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第15小節/execl數據demo.xlsx"
# 解析數據
data = pd.read_excel(data_path)
print(data)

# --- 輸出結果 data 數據對象 ---
   BB  AA      CC    EE    DD
0  11   3  3230.0  45.6  20.0
1   4   2  2124.0  67.0   NaN
2   7  23   345.0  33.9  23.0
3   5  11  2361.0  59.5   4.0
4  10  45   326.0  69.9  55.0
5  33  33     NaN  75.0  67.0

2.1 sort_index () 函數

該函數是對數據集進行按索引進行排序時使用的,里面提供了豐富的函數,下面我將列舉幾個常用的參數。

df.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)
參數名 說明
axis 排序的索引軸,axis=0 行索引(默認),axis=1 列索引
ascending ascending=True 升序或是 ascending=False 降序排序

下面我們將通過上面從 Excel 解析的數據集 data 進行該函數這個參數的代碼演示:

# data 為上面從 Excel 中解析出來的數據
# 1.按行索引進行降序排列 axis=0,ascending=False
data_res=data.sort_index(axis=0,ascending=False)
print(data_res)
# --- 輸出結果 ---
   BB  AA      CC    EE    DD
5  33  33     NaN  75.0  67.0
4  10  45   326.0  69.9  55.0
3   5  11  2361.0  59.5   4.0
2   7  23   345.0  33.9  23.0
1   4   2  2124.0  67.0   NaN
0  11   3  3230.0  45.6  20.0
# 結果解析:通過對這兩個參數的設置,我們按照行索引進行了降序排列。

# 2.按列索引進行降序排列 axis=1,ascending=False
data_res=data.sort_index(axis=1,ascending=False)
print(data_res)
# --- 輸出結果 ---
     EE    DD      CC  BB  AA
0  45.6  20.0  3230.0  11   3
1  67.0   NaN  2124.0   4   2
2  33.9  23.0   345.0   7  23
3  59.5   4.0  2361.0   5  11
4  69.9  55.0   326.0  10  45
5  75.0  67.0     NaN  33  33
# 結果解析:通過設置按照列索引,進行降序排列數據,可以看到輸出結果。

# 3.按列索引進行降序排列 axis=1,ascending=True
data_res=data.sort_index(axis=1,ascending=True)
print(data_res)
# --- 輸出結果 ---
   AA  BB      CC    DD    EE
0   3  11  3230.0  20.0  45.6
1   2   4  2124.0   NaN  67.0
2  23   7   345.0  23.0  33.9
3  11   5  2361.0   4.0  59.5
4  45  10   326.0  55.0  69.9
5  33  33     NaN  67.0  75.0
# 結果解析:通過設置按照列索引進行升序排列數據,可以看到列數據的索引順序變為了從 AA 到 EE 。

2.2 sort_values () 函數

該函數是專門用于數據集進行數據值的排序使用,下面同樣我列舉了他常用的一些參數設置。

pd.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
參數名 說明
by 指定需要排序的列或者行
axis 指定需要排序的是列還是行,默認 axis=0 表示行
ascending 設置升序還是降序,默認是 ascending=True 為升序
na_position 設置缺失值顯示的位置,有 first 和 last 兩個值,默認是 last

下面我們利用前面解析出來 data 數據集,進行各參數詳細的設置使用。

# data 為上面從 Excel 中解析出來的數據
# 1.按 AA 列進行 行數據的 升序 排序
data_res=data.sort_values(by=["AA"],ascending=True,axis=0)
print(data_res)
# --- 輸出結果 ---
   BB  AA      CC    EE    DD
1   4   2  2124.0  67.0   NaN
0  11   3  3230.0  45.6  20.0
3   5  11  2361.0  59.5   4.0
2   7  23   345.0  33.9  23.0
5  33  33     NaN  75.0  67.0
4  10  45   326.0  69.9  55.0
# 結果解析:我們這里通過 by 參數設置了是以 AA 列為標準,進行 axis=0 行數據的 ascending=True 升序排序,可以看到 AA 列數據分別為 2,3,11,23,33,45,以此為標準進行了行數據的排序。

# 2.按 DD 列進行 行數據的 降序 排序
data_res=data.sort_values(by=["DD"],ascending=False,axis=0)
print(data_res)
# --- 輸出結果 ---
   BB  AA      CC    EE    DD
5  33  33     NaN  75.0  67.0
4  10  45   326.0  69.9  55.0
2   7  23   345.0  33.9  23.0
0  11   3  3230.0  45.6  20.0
3   5  11  2361.0  59.5   4.0
1   4   2  2124.0  67.0   NaN
# 結果解析:我們這里以 EE 列為標準,進行行數據的降序排序,可以看到數據的排序結果,這里要注意一點就是 DD 列數據存在缺失值 NaN ,默認的參數 na_position='last' 表示將缺失值放在最后。

# 3.na_position='first' 參數 ,按 DD 列進行 行數據的 降序 排序
data_res=data.sort_values(by=["DD"],ascending=False,axis=0,na_position='first')
print(data_res)
# --- 輸出結果 ---
   BB  AA      CC    EE    DD
1   4   2  2124.0  67.0   NaN
5  33  33     NaN  75.0  67.0
4  10  45   326.0  69.9  55.0
2   7  23   345.0  33.9  23.0
0  11   3  3230.0  45.6  20.0
3   5  11  2361.0  59.5   4.0
# 結果解析:這里依然是按 DD 列進行行排序,通過設置 na_position='first' 缺失值放在了開始位置。

# 4.設置axis=1,以行為判斷標準進行列排序
data_res=data.sort_values(by=[3],ascending=False,axis=1)
print(data_res)
# --- 輸出結果 ---
       CC    EE  AA  BB    DD
0  3230.0  45.6   3  11  20.0
1  2124.0  67.0   2   4   NaN
2   345.0  33.9  23   7  23.0
3  2361.0  59.5  11   5   4.0
4   326.0  69.9  45  10  55.0
5     NaN  75.0  33  33  67.0
# 結果解析:這里我們設置 axis=1 表示對列進行排序,ascending=False 進行降序排序,通過設置 by=[3],這里表明以第四行為排序依據對列進行降序排序。

3. Pandas 排名操作

排名操作是根據數據的大小,判斷出該數據在數據集中的名次,默認是從 1 開始一直到數據中有效數據的長度,如果存在重復數據,則會求出這幾個數據的平均排名。Pandas 庫中針對排名操作提供了方便的操作函數 rank () .

df.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)

接下來我們列舉該函數常用的一些參數:

參數名 說明
axis 指定是在行上,還是列上進行排名。默認是 axis=0 從列上進行排名
method 平級排名的取值方法,有四種方式。

method 用于平級數據,也就是要排名的數據中,他們的大小是一樣的,這種平級的數據有四種排名的方式:

  • average:在一組相等的排名數據中,為每個數據取他們的平均排名;
  • min:在一組相等的排名數據中,使用最小的排名給每個數據;
  • max:在一組相等的排名數據中,使用最大的排名給每個數據;
  • first:在一組相等的排名數據中,按各個值在原始數據中的出現順序進行排名。

下面我們通過程序代碼詳細講解排名函數的用法:

# 導入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第15小節/execl數據demo.xlsx"
# 解析數據
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
   BB  AA      CC    EE    DD
0  11   3  3230.0  45.6  20.0
1   4   2  2124.0  67.0   NaN
2   7  23   345.0  33.9  23.0
3   5  11  2361.0  59.5   4.0
4  10  45   326.0  69.9  55.0
5  33  33     NaN  75.0  67.0

# rank() 函數
# 1. 默認的 axis=0,在列上進行排序
data_res=data.rank()
print(data_res)
# --- 輸出結果 ---
    BB   AA   CC   EE   DD
0  5.0  2.0  5.0  2.0  2.0
1  1.0  1.0  3.0  4.0  NaN
2  3.0  4.0  2.0  1.0  3.0
3  2.0  3.0  4.0  3.0  1.0
4  4.0  6.0  1.0  5.0  4.0
5  6.0  5.0  NaN  6.0  5.0
# 結果解析: 通過 rank() 函數默認的在列方向進行排名的操作,比如"BB"列中,每一個數據在該列中的名次都得到了體現,但對于出現的缺失值 NaN 數據,是不進行排名計算的。

# 2. 設置的 axis=1,在行放方向上進行排序
data_res=data.rank(axis=1)
print(data_res)
# --- 輸出結果 ---
    BB   AA   CC   EE   DD
0  2.0  1.0  5.0  4.0  3.0
1  2.0  1.0  4.0  3.0  NaN
2  1.0  2.5  5.0  4.0  2.5
3  2.0  3.0  5.0  4.0  1.0
4  1.0  2.0  5.0  4.0  3.0
5  1.5  1.5  NaN  4.0  3.0
# 結果解析:這里我們設置了在行上進行排名的計算,這里看到最后一行,因為我們原數據該行的前兩列數據時候相同的,都是 33,這里因為默認的 method=average,所有33取了他們平均排名 1+2 的平均值 1.5。 接下來我們設置 method=first ,看一下處理效果:

# 3. 設置 method=‘first’,修改默認的相同排名的處理方式
data_res=data.rank(axis=1,method='first')
print(data_res)
# --- 輸出結果 ---
    BB   AA   CC   EE   DD
0  2.0  1.0  5.0  4.0  3.0
1  2.0  1.0  4.0  3.0  NaN
2  1.0  2.0  5.0  4.0  3.0
3  2.0  3.0  5.0  4.0  1.0
4  1.0  2.0  5.0  4.0  3.0
5  1.0  2.0  NaN  4.0  3.0
# 結果解析:同樣的我們還是看最后一行,因為我們設置了 method='first' ,所以對于相同排名的數據,會使用該數據在原數據中的出現順序進行處理,所以第五行的前兩列的數據排名分別為 1,2。

4. 小結

本節課程我們主要學習了 Pandas 對于數據的排序和排名操作,針對排序還具體分為了按索引進行排序和按數據值進行排序,主要涉及了 sort_index () 函數,sort_values () 函數和 rank () 函數的操作。本節課程的重點如下:

  • 排序函數 sort_index () 和 sort_values () 的區別和使用;
  • rank () 函數用于數據排名的具體操作方法。

圖片描述