当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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