關於Python中rank 函式的理解

2021-09-23 20:49:59 字數 3788 閱讀 2086

rank也就是所說的」排名「,是指對陣列從1到有效資料點總數分配名次的操作。

預設情況下,rank通過將平均排名分配到每個組來打破平級關係:

import pandas as pd

obj = pd.series([7,-5,7,4,2,0,4])

obj

執行結果:

0 71 -5

2 73 4

4 25 0

6 4dtype: int64

obj.rank()
執行結果:

0 6.5

1 1.0

2 6.5

3 4.5

4 3.0

5 2.0

6 4.5

dtype: float64

執行結果分析:

元素索引

排名-51#1

05#22

4#343

#446#5

70#67

2#7根據上面的**可以看出,索引0對應的元素排名為6,但是使用rank()會對排名求平均值,也就是說有n歌相同的元素,排名會相加並除以n,所以說索引0對應的元素最終排名為6.5;索引1對應的元素排名為1,所以它對應的排名值為1.0,以此類推得出上述執行結果。

這個函式其中傳入了乙個引數『first』,作用是按照值在資料**現的次序分配排名。

obj.rank(method='first')
執行結果:

0 6.0

1 1.0

2 7.0

3 4.0

4 3.0

5 2.0

6 5.0

dtype: float64

執行結果分析:

元素索引

排名-51#1

05#22

4#343

#446#5

70#67

2#7結合上面的**,我們拿索引為0的元素舉例說明,可以看出索引0的排名為6,但是注意,當傳入『first』是就意味著不會對排名進行平均取值,所以即使有相同的元素,也會按照誰先出現就把誰排在前面(是不是有點像上學期間考試的成績排名?按姓名字母排序,即使你倆分數一樣)所以它對應的值為6.0,以此類推,在這裡不再贅述。

這裡method的引數變為了 max,意味著對整個組使用最大排名。

obj.rank(method='max')
執行結果:

0 7.0

1 1.0

2 7.0

3 5.0

4 3.0

5 2.0

6 5.0

dtype: float64

執行結果分析:

元素索引

排名-51#1

05#22

4#343

#446#5

70#67

2#7以索引為0的元素為例,它對應的元素是7,排名為6,但是它有乙個和它一樣的元素,排名為7,所以這裡取最大的排名,也就是7,所以執行結果中索引為0對應的值為7.0,剩下的元素同理,這裡不再贅述。

min 的意思為對整個組使用最小排名。

obj.rank(method='min')
執行結果:

0 6.0

1 1.0

2 6.0

3 4.0

4 3.0

5 2.0

6 4.0

dtype: float64

執行結果分析:

元素索引

排名-51#1

05#22

4#343

#446#5

70#67

2#7還是以索引為0的元素為例,它對應的值為7,排名為6,即使後面有和它值相同的元素,排名取它們其中最小的那個,所以執行結果中索引為0對應的值為6,其餘元素以此類推,這裡不再贅述。

這個函式相較於上面的函式,多傳入了乙個ascending,它的意思是」公升序「的意思,這裡取值為 false,意為對元素進行降序排序;而且method的值取為 max,與上面的max作用相同。

obj.rank(ascending=false,method='max')
執行結果:

0 2.0

1 7.0

2 2.0

3 4.0

4 5.0

5 6.0

6 4.0

dtype: float64

執行結果分析:

元素索引

排名-51#7

05#62

4#543

#346#4

70#17

2#2可以看出,與上面的**相比,最大的變化是元素進行了降序排序,所以名次也發生了變化。我還是拿索引為0的元素拿來舉例(因為它太有代表性了,所以我總是用它來說明),它現在對應的排名為6,但是這裡method取的值為max,所以當有相同的元素時,取排名最大的那個,所以它的值為2.0,剩下的元素也是一樣,這裡不再贅述。

這個函式相較於上面的函式,method的值變為了min,與上面的min作用相同。

obj.rank(ascending=false,method='min')
執行結果:

0 1.0

1 7.0

2 1.0

3 3.0

4 5.0

5 6.0

6 3.0

dtype: float64

執行結果分析:

元素索引

排名-51#7

05#62

4#543

#346#4

70#17

2#2索引值為0的元素對應的排名為1,即使後面有相同的元素,取它們之中最小的排名,所以它對應的值為1.0,其餘元素排名以此類推,這裡不再贅述。

它會對dataframe的0軸進行排名(不了解軸的可以去看一下numpy中ndarray的解釋),可以把dataframe理解為乙個二維陣列,對0軸排名也就是按著縱向排名

我們先初始化乙個dataframe

frame = pd.dataframe()

frame

執行結果:

frame.rank()
執行結果:

執行結果分析:

先對columns='b』的資料進行排名,然後對columns='a』排名,最後對column='c』進行排名,排名規則與上面的series規則一致,這裡不再贅述。

這裡傳入了乙個引數 axis,它的意思是"軸"的意思,上面的那個如果括號裡不加,預設是對0軸進行排名(等價於axis=0),這個引數傳入的值 columns 意為對『b』,『a』,'c』這幾個列進行排名(橫向排名)。

frame.rank(axis='columns')
執行結果:

執行結果分析:

先對index=0這一行進行排名,其次對index=2排名,最後對index=3進行排名,排名規則也是和上面的一樣。

《利用python進行資料分析》

python3中rank函式的用法

網上存在這麼乙個例子 obj pd.series obj.rank 輸出為 0 6.5 1 1.0 2 6.5 3 4.5 4 3.0 5 2.0 6 4.5 dtype float64 之前一直沒弄懂是啥意思 這裡解釋下 rank 表示在這個數在原來的向量中排第幾名,有相同的數,按最小排序,取平均...

rank函式統計排行

rank 是乙個從 oracle 8.1.6 開始引入的統計函式。rank 的功能是按照某種分組方式計算出返回結果的排行。rank 函式有兩個,乙個是 rank 另外乙個是 dense rank rank 排序在碰到並列值的時候,下乙個排行序號會跳過並列的值,而 dense rank 排序的結果有並...

oracle排名函式rank

記錄乙個常見的例子供學習參考 連續排名dense rank 不連續排名rank 分組partition 不分組 原始表 t score 姓名 學科 成績 張三 english 80 李四 english 70 王五 english 90 趙六 english 80 張三 chinese 90 李四 ...