本文簡單的說一下自己對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