pandas rank()函數簡介


本文簡單的說一下自己對pandas的rank()函數的簡單講解。

函數原型:rank(axis=0, method: str = 'average', numeric_only: Union[bool, NoneType] = None, na_option: str = 'keep', ascending: bool = True, pct: bool = False)

官方文檔:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rank.html

《使用python進行數據分析》一書中的解釋為:rank是通過“為各組分配一個平均排名”的方式破壞平級關系的。pandas排名會增加一個排名值從1開始,一直到數組中有效數據的數量)。但是還是不好理解,我簡單的做了一個圖片來說明。

假設創建了一個Series對象obj = Series([7, -5, 7, 4, 2, 0, 4]),就是上圖中”索引“和”值“這兩列,我們人為的按照值的大小進行了一個排名,並且產生了一個序列(”人為的排名“)這一列,關於有兩個索引(0和2)的值都是7的這種情況的排名的規則是,首先出現的值排名靠前。

下面就來說一下method參數的作用。

  • 若為”average“,不相同的值,排名就取”人為的排名“的排名值,相同值的,排名需要求平均值,例如:索引0和2的值都為7,則平均值為(7+6)/2=6.5;
  • 若為”min“,不相同的值,排名就取”人為的排名“的排名值,相同值的,排名取最小值,例如:索引0和2的值都為7,則排名都取6;
  • 若為”max“,不相同的值,排名就取”人為的排名“的排名值,相同值的,排名取最大值,例如:索引0和2的值都為7,則排名都取7;
  • 若為”first“,則就取”人為的排名“這列的值。

method

說明

‘average’

默認,在相等分組中,為各個值分配平均排名

‘min’

使用整個分組的最小排名

‘max’

使用整個分組的最大排名

‘first’

按值在原始數據中出現順序分配排名

關於”first“參數值的解釋”值在原始數據中出現順序“的解釋如下:從1開始排序,若序列中出現了相同的值,則首先出現的值排名靠前。

下面進行測試:

(1)method='average'

 1 >>> obj
 2 0    7
 3 1   -5
 4 2    7
 5 3    4
 6 4    2
 7 5    0
 8 6    4
 9 dtype: int64
10 >>> obj.rank( method='average') 
11 0    6.5
12 1    1.0
13 2    6.5
14 3    4.5
15 4    3.0
16 5    2.0
17 6    4.5
18 dtype: float64

(2)method='min'

 1 >>> obj
 2 0    7
 3 1   -5
 4 2    7
 5 3    4
 6 4    2
 7 5    0
 8 6    4
 9 dtype: int64
10 >>> obj.rank( method='average') 
11 0    6.5
12 1    1.0
13 2    6.5
14 3    4.5
15 4    3.0
16 5    2.0
17 6    4.5
18 dtype: float64

(3)method='max'

 1 >>> obj
 2 0    7
 3 1   -5
 4 2    7
 5 3    4
 6 4    2
 7 5    0
 8 6    4
 9 dtype: int64
10 >>> obj.rank( method='max') 
11 0    7.0
12 1    1.0
13 2    7.0
14 3    5.0
15 4    3.0
16 5    2.0
17 6    5.0
18 dtype: float64

(4)method='first'

 1 >>> obj
 2 0    7
 3 1   -5
 4 2    7
 5 3    4
 6 4    2
 7 5    0
 8 6    4
 9 dtype: int64
10 >>> obj.rank( method='first') 
11 0    6.0
12 1    1.0
13 2    7.0
14 3    4.0
15 4    3.0
16 5    2.0
17 6    5.0
18 dtype: float64


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM