當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Pandas DataFrame rank方法用法及代碼示例


Pandas DataFrame.rank(~) 方法計算 DataFrame 的每行或每列的值的順序。

參數

1.axis·intstring·optional

是否按行或按列計算排序:

說明

0"index"

為每列計算排序。

1"columns"

為每一行計算排序。

默認情況下 axis=0

2.method·string·optional

如何對組中的重複值進行排名:

說明

"average"

返回排名的平均值。

"min"

返回排名的最小值。

"max"

返回排名的最大值。

"first"

根據 DataFrame 中的順序返回排名。

"dense"

"min" 類似,但每組後排名加一。

檢查下麵的示例以進行說明。默認情況下,method="average"

3.numeric_only·boolean·optional

如果是 True ,則僅對數值執行排序。默認情況下,numeric_only=True

4.na_option·string·optional

如何處理NaN值:

說明

"keep"

保持 NaN 不變,並在排序中忽略它們。

"top"

將最低順序( 12 、...)分配給 NaN

"bottom"

將最高排序分配給 NaN

默認情況下,na_option="keep"

5.ascending·boolean·optional

  • 如果是 True ,則最小值的等級為 1。

  • 如果是 False ,那麽最大值的等級將為 1。

默認情況下,ascending=False

6.pct·boolean·optional

如果 True ,則排名將以百分位數表示。默認情況下,pct=False

返回值

DataFrame 包含源 DataFrame 中值的排序。

例子

考慮以下 DataFrame :

df = pd.DataFrame({"A":[4,5,3,3], "B": ["b","a","c","d"]})
df



   A  B
0  4  b
1  5  a
2  3  c
3  3  d

按列排名

要獲取每列值的排序:

df.rank()   # axis=0



   A    B  
0  3.0  2.0
1  4.0  1.0
2  1.5  3.0
3  1.5  4.0

請注意 A 列中有兩個 1.5 。這是因為我們有一個平局 - 條目 A2A3 共享相同的值,因此 rank(~) 方法計算它們的排名平均值(默認為 method="average")。即 12 的平均值。

按行排名

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[1,2],"C":[5,6]})
df



   A  B  C
0  3  1  5
1  4  2  6

要對每行的值進行排名,請設置 axis=1

df.rank(axis=1)



   A    B    C
0  2.0  1.0  3.0
1  2.0  1.0  3.0

指定方法

考慮以下 DataFrame :

df = pd.DataFrame({"A":[8,6,6,8]})
df



   A
0  8
1  6
2  6
3  8
平均的

默認情況下, method="average" ,這意味著計算重複值的平均排名:

df.rank()



   A
0  3.5
1  1.5
2  1.5
3  3.5
最大限度

使用每組的最大排名:

df.rank(method="max")



   A
0  4.0
1  2.0
2  2.0
3  4.0

這裏再次df供您參考:

df



   A
0  8
1  6
2  6
3  8
分鍾

使用每組的最小排名:

df.rank(method="min")



   A
0  3.0
1  1.0
2  1.0
3  3.0
第一的

要使用原始 DataFrame 中的值的順序:

df.rank(method="first")



   A
0  3.0
1  1.0
2  2.0
3  4.0

在這裏,請注意第一個值 8 的排名如何分配 3 ,而最後一個值 8 的排名如何分配 4 。這是因為它們在 df 中的排序,即第一個 8 被分配較低的排名,因為它在 df 中出現較早。

這裏再次df供您參考:

df



   A
0  8
1  6
2  6
3  8
稠密

這與 "min" 類似,不同之處在於每個重複組後排名都會增加 1:

df.rank(method="dense")



   A
0  2.0
1  1.0
2  1.0
3  2.0

為了澄清,在 "min" 的情況下,組值 8 被分配了 3 的排名,但對於 "dense" ,每組後排名僅增加 1。因此,我們最終得到下一組的排名2

指定na_option

考慮以下帶有一些缺失值的DataFrame:

df = pd.DataFrame({"A":[pd.np.NaN,6,pd.np.NaN,5]})
df



   A
0  NaN
1  6.0
2  NaN
3  5.0

默認情況下, na_option="keep" ,這意味著 NaN 在排名期間被忽略並保留在結果 DataFrame 中:

df.rank()   # na_option="keep"



   A
0  NaN
1  2.0
2  NaN
3  1.0

要將最低排名( 12... )分配給缺失值:

df.rank(na_option="top")



   A
0  1.5
1  4.0
2  1.5
3  3.0

在這裏,您會看到 1.5 ,因為我們有 2 個 NaN ,因此計算了它們的排名平均值( 12 )。

要將最高排名分配給缺失值:

df.rank(na_option="bottom")



   A
0  3.5
1  2.0
2  3.5
3  1.0

排名按降序排列

考慮我們之前的DataFrame:

df = pd.DataFrame({"A":[4,5,3,3], "B":["b","a","c","d"]})
df



   A  B
0  4  b
1  5  a
2  3  c
3  3  d

要按降序排列(最大值的等級為 1),隻需設置 ascending=False

df.rank(ascending=False)



   A    B  
0  2.0  3.0
1  1.0  4.0
2  3.5  2.0
3  3.5  1.0

使用百分位數排名

考慮以下 DataFrame :

df = pd.DataFrame({"A":[4,5,3,3], "B":["b","a","c","d"]})
df



   A  B
0  4  b
1  5  a
2  3  c
3  3  d

要使用百分位數排名,請設置 pct=True

df_one.rank(pct=True)



   A      B   
0  0.750  0.50
1  1.000  0.25
2  0.375  0.75
3  0.375  1.00

按多列排名

考慮以下 DataFrame :

df = pd.DataFrame({"A":[8,9,9], "B":[7,6,5]})
df



   A  B
0  8  7
1  9  6
2  9  5

要按列 A 排名,同時使用列 B 作為領帶燒杯:

df[["A","B"]].apply(tuple, axis=1).rank()



0    1.0
1    3.0
2    2.0
dtype: float64

請注意以下事項:

  • 第一行的排名為1,因為A 的值最低。

  • 第二行和第三行都有相同的值 A 。因此,我們將它們的值B用作tie-breaker;由於第三行的 B 值較大,因此它的排名為 2

現在讓我們分解代碼。我們首先使用 apply(~) 方法將兩列組合成一列元組:

df[["A","B"]].apply(tuple, axis=1)



0    (8, 7)
1    (9, 6)
2    (9, 5)
dtype: object

然後我們使用排名方法,如下所示:

df[["A","B"]].apply(tuple, axis=1).rank()



0    1.0
1    3.0
2    2.0
dtype: float64

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | rank method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。