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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。