第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Pandas 排序和排名操作

1. 前言

上一小節(jié),我們學(xué)習(xí)了 Pandas 庫(kù)對(duì)于多個(gè)數(shù)據(jù)集的連接和合并操作,滿足了我們?cè)跀?shù)據(jù)行和列上的內(nèi)容擴(kuò)展需要,除了這點(diǎn),我們很多時(shí)候也需要對(duì)某個(gè)數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行排序操作,按照遞增或者遞減的方式將數(shù)據(jù)依據(jù)某個(gè)條件進(jìn)行排序,Pandas 庫(kù)針對(duì)這樣一個(gè)較為常見(jiàn)的數(shù)據(jù)處理需求,又提供了怎樣的操作方式呢?

本節(jié)我們將一起學(xué)習(xí) Pandas 庫(kù)中對(duì)于數(shù)據(jù)的排序操作,分為按索引排序和按數(shù)據(jù)值進(jìn)行排序,除了排序功能,Pandas 還提供了排名的操作,接下來(lái)我們一起學(xué)習(xí) Pandas 庫(kù)的排序和排名操作吧。

2. Pandas 排序操作

Pandas 對(duì)于排序的操作分為按索引排序和按數(shù)據(jù)值排序,分別通過(guò)函數(shù) sort_index () 和 sort_values () 進(jìn)行實(shí)現(xiàn),接下來(lái)我們?cè)敿?xì)學(xué)習(xí)每個(gè)函數(shù)的使用方式。首先我們通過(guò) Excel 進(jìn)行數(shù)據(jù)的解析。

圖片描述

Pandas 解析的數(shù)據(jù)對(duì)象 data 具體內(nèi)容如下:

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

# --- 輸出結(jié)果 data 數(shù)據(jù)對(duì)象 ---
   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 () 函數(shù)

該函數(shù)是對(duì)數(shù)據(jù)集進(jìn)行按索引進(jìn)行排序時(shí)使用的,里面提供了豐富的函數(shù),下面我將列舉幾個(gè)常用的參數(shù)。

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

下面我們將通過(guò)上面從 Excel 解析的數(shù)據(jù)集 data 進(jìn)行該函數(shù)這個(gè)參數(shù)的代碼演示:

# data 為上面從 Excel 中解析出來(lái)的數(shù)據(jù)
# 1.按行索引進(jìn)行降序排列 axis=0,ascending=False
data_res=data.sort_index(axis=0,ascending=False)
print(data_res)
# --- 輸出結(jié)果 ---
   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
# 結(jié)果解析:通過(guò)對(duì)這兩個(gè)參數(shù)的設(shè)置,我們按照行索引進(jìn)行了降序排列。

# 2.按列索引進(jìn)行降序排列 axis=1,ascending=False
data_res=data.sort_index(axis=1,ascending=False)
print(data_res)
# --- 輸出結(jié)果 ---
     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
# 結(jié)果解析:通過(guò)設(shè)置按照列索引,進(jìn)行降序排列數(shù)據(jù),可以看到輸出結(jié)果。

# 3.按列索引進(jìn)行降序排列 axis=1,ascending=True
data_res=data.sort_index(axis=1,ascending=True)
print(data_res)
# --- 輸出結(jié)果 ---
   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
# 結(jié)果解析:通過(guò)設(shè)置按照列索引進(jìn)行升序排列數(shù)據(jù),可以看到列數(shù)據(jù)的索引順序變?yōu)榱藦?AA 到 EE 。

2.2 sort_values () 函數(shù)

該函數(shù)是專(zhuān)門(mén)用于數(shù)據(jù)集進(jìn)行數(shù)據(jù)值的排序使用,下面同樣我列舉了他常用的一些參數(shù)設(shè)置。

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

下面我們利用前面解析出來(lái) data 數(shù)據(jù)集,進(jìn)行各參數(shù)詳細(xì)的設(shè)置使用。

# data 為上面從 Excel 中解析出來(lái)的數(shù)據(jù)
# 1.按 AA 列進(jìn)行 行數(shù)據(jù)的 升序 排序
data_res=data.sort_values(by=["AA"],ascending=True,axis=0)
print(data_res)
# --- 輸出結(jié)果 ---
   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
# 結(jié)果解析:我們這里通過(guò) by 參數(shù)設(shè)置了是以 AA 列為標(biāo)準(zhǔn),進(jìn)行 axis=0 行數(shù)據(jù)的 ascending=True 升序排序,可以看到 AA 列數(shù)據(jù)分別為 2,3,11,23,33,45,以此為標(biāo)準(zhǔn)進(jìn)行了行數(shù)據(jù)的排序。

# 2.按 DD 列進(jìn)行 行數(shù)據(jù)的 降序 排序
data_res=data.sort_values(by=["DD"],ascending=False,axis=0)
print(data_res)
# --- 輸出結(jié)果 ---
   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
# 結(jié)果解析:我們這里以 EE 列為標(biāo)準(zhǔn),進(jìn)行行數(shù)據(jù)的降序排序,可以看到數(shù)據(jù)的排序結(jié)果,這里要注意一點(diǎn)就是 DD 列數(shù)據(jù)存在缺失值 NaN ,默認(rèn)的參數(shù) na_position='last' 表示將缺失值放在最后。

# 3.na_position='first' 參數(shù) ,按 DD 列進(jìn)行 行數(shù)據(jù)的 降序 排序
data_res=data.sort_values(by=["DD"],ascending=False,axis=0,na_position='first')
print(data_res)
# --- 輸出結(jié)果 ---
   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
# 結(jié)果解析:這里依然是按 DD 列進(jìn)行行排序,通過(guò)設(shè)置 na_position='first' 缺失值放在了開(kāi)始位置。

# 4.設(shè)置axis=1,以行為判斷標(biāo)準(zhǔn)進(jìn)行列排序
data_res=data.sort_values(by=[3],ascending=False,axis=1)
print(data_res)
# --- 輸出結(jié)果 ---
       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
# 結(jié)果解析:這里我們?cè)O(shè)置 axis=1 表示對(duì)列進(jìn)行排序,ascending=False 進(jìn)行降序排序,通過(guò)設(shè)置 by=[3],這里表明以第四行為排序依據(jù)對(duì)列進(jìn)行降序排序。

3. Pandas 排名操作

排名操作是根據(jù)數(shù)據(jù)的大小,判斷出該數(shù)據(jù)在數(shù)據(jù)集中的名次,默認(rèn)是從 1 開(kāi)始一直到數(shù)據(jù)中有效數(shù)據(jù)的長(zhǎng)度,如果存在重復(fù)數(shù)據(jù),則會(huì)求出這幾個(gè)數(shù)據(jù)的平均排名。Pandas 庫(kù)中針對(duì)排名操作提供了方便的操作函數(shù) rank () .

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

接下來(lái)我們列舉該函數(shù)常用的一些參數(shù):

參數(shù)名 說(shuō)明
axis 指定是在行上,還是列上進(jìn)行排名。默認(rèn)是 axis=0 從列上進(jìn)行排名
method 平級(jí)排名的取值方法,有四種方式。

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

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

下面我們通過(guò)程序代碼詳細(xì)講解排名函數(shù)的用法:

# 導(dǎo)入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第15小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
   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() 函數(shù)
# 1. 默認(rèn)的 axis=0,在列上進(jìn)行排序
data_res=data.rank()
print(data_res)
# --- 輸出結(jié)果 ---
    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
# 結(jié)果解析: 通過(guò) rank() 函數(shù)默認(rèn)的在列方向進(jìn)行排名的操作,比如"BB"列中,每一個(gè)數(shù)據(jù)在該列中的名次都得到了體現(xiàn),但對(duì)于出現(xiàn)的缺失值 NaN 數(shù)據(jù),是不進(jìn)行排名計(jì)算的。

# 2. 設(shè)置的 axis=1,在行放方向上進(jìn)行排序
data_res=data.rank(axis=1)
print(data_res)
# --- 輸出結(jié)果 ---
    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
# 結(jié)果解析:這里我們?cè)O(shè)置了在行上進(jìn)行排名的計(jì)算,這里看到最后一行,因?yàn)槲覀冊(cè)瓟?shù)據(jù)該行的前兩列數(shù)據(jù)時(shí)候相同的,都是 33,這里因?yàn)槟J(rèn)的 method=average,所有33取了他們平均排名 1+2 的平均值 1.5。 接下來(lái)我們?cè)O(shè)置 method=first ,看一下處理效果:

# 3. 設(shè)置 method=‘first’,修改默認(rèn)的相同排名的處理方式
data_res=data.rank(axis=1,method='first')
print(data_res)
# --- 輸出結(jié)果 ---
    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
# 結(jié)果解析:同樣的我們還是看最后一行,因?yàn)槲覀冊(cè)O(shè)置了 method='first' ,所以對(duì)于相同排名的數(shù)據(jù),會(huì)使用該數(shù)據(jù)在原數(shù)據(jù)中的出現(xiàn)順序進(jìn)行處理,所以第五行的前兩列的數(shù)據(jù)排名分別為 1,2。

4. 小結(jié)

本節(jié)課程我們主要學(xué)習(xí)了 Pandas 對(duì)于數(shù)據(jù)的排序和排名操作,針對(duì)排序還具體分為了按索引進(jìn)行排序和按數(shù)據(jù)值進(jìn)行排序,主要涉及了 sort_index () 函數(shù),sort_values () 函數(shù)和 rank () 函數(shù)的操作。本節(jié)課程的重點(diǎn)如下:

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

圖片描述