Pandas DataFrame.rank(~) 方法計算 DataFrame 的每行或每列的值的順序。
參數
1.axis·int或string·optional
是否按行或按列計算排序:
|
軸 |
說明 |
|---|---|
|
|
為每列計算排序。 |
|
|
為每一行計算排序。 |
默認情況下 axis=0 。
2.method·string·optional
如何對組中的重複值進行排名:
|
值 |
說明 |
|---|---|
|
|
返回排名的平均值。 |
|
|
返回排名的最小值。 |
|
|
返回排名的最大值。 |
|
|
根據 DataFrame 中的順序返回排名。 |
|
|
與 |
檢查下麵的示例以進行說明。默認情況下,method="average" 。
3.numeric_only·boolean·optional
如果是 True ,則僅對數值執行排序。默認情況下,numeric_only=True 。
4.na_option·string·optional
如何處理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 。這是因為我們有一個平局 - 條目 A2 和 A3 共享相同的值,因此 rank(~) 方法計算它們的排名平均值(默認為 method="average")。即 1 和 2 的平均值。
按行排名
考慮以下 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
要將最低排名( 1 、 2 、 ... )分配給缺失值:
df.rank(na_option="top")
A
0 1.5
1 4.0
2 1.5
3 3.0
在這裏,您會看到 1.5 ,因為我們有 2 個 NaN ,因此計算了它們的排名平均值( 1 和 2 )。
要將最高排名分配給缺失值:
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
相關用法
- Python PySpark DataFrame randomSplit方法用法及代碼示例
- Python Pandas DataFrame radd方法用法及代碼示例
- Python Pandas DataFrame rdiv方法用法及代碼示例
- Python PySpark DataFrame repartition方法用法及代碼示例
- Python PySpark DataFrame replace方法用法及代碼示例
- Python PySpark DataFrame rdd屬性用法及代碼示例
- Python Pandas DataFrame reset_index方法用法及代碼示例
- Python Pandas DataFrame reorder_levels方法用法及代碼示例
- Python Pandas DataFrame rsub方法用法及代碼示例
- Python Pandas DataFrame round方法用法及代碼示例
- Python Pandas DataFrame resample方法用法及代碼示例
- Python Pandas DataFrame reindex方法用法及代碼示例
- Python Pandas DataFrame replace方法用法及代碼示例
- Python Pandas DataFrame rolling方法用法及代碼示例
- Python Pandas DataFrame rpow方法用法及代碼示例
- Python Pandas DataFrame rfloordiv方法用法及代碼示例
- Python Pandas DataFrame rtruediv方法用法及代碼示例
- Python Pandas DataFrame rename_axis方法用法及代碼示例
- Python Pandas DataFrame rmod方法用法及代碼示例
- Python Pandas DataFrame rmul方法用法及代碼示例
- Python Pandas DataFrame rename方法用法及代碼示例
- Python Pandas DataFrame empty屬性用法及代碼示例
- Python Pandas DataFrame pop方法用法及代碼示例
- Python Pandas DataFrame nsmallest方法用法及代碼示例
- Python Pandas DataFrame sample方法用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | rank method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
