Pandas | rank()函数

1. 引言

pandas.DataFrame.rank 官网链接
在这里插入图片描述

很多资料上对这个函数的翻译为:

默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的“。

作为小白,根本没觉得这在说人话。

2. 我的理解:

这是一个排名函数,目的就是按照某种规则(从大到小,从小到大)给原序列的值进行排名。所返回的结果也是一个序列,它展示来愿序列中每一个值在序列中的名次。现实中名次会有多种情况,不同的时候也会需要不同的名次展示方式,这就是这个函数要解决的问题。

2.1. 无重复名次的排名:

在这里插入图片描述
这个ser排序前的值表示的是这个Series本身的顺序。而调用rank()后,虽然返回序列的值没变,但此时的值含义变了。它表示:在原来ser这个序列中,0-5这6个索引所对应的每一个值分别在序列里排名第几。

因为本身这六个数就是按从小到大的顺序排列的,所以调用rank()后,索引0对应的值1,在ser这个序列中排名第1位,而索引5对应的值6,在ser这个序列中排名第6位。

2.2. 有重复名次的排名

那如果序列中出现了重复值的情况下会怎样呢?
再举个例子:
在这里插入图片描述
索引0和索引1对应的值均为1,按照上面的说法,调用rank()方法后,他们的排名分别是第1位,和第2位,那么究竟是索引0对应的值是第1,还是索引1对应的值是第1呢?

rank函数的默认处理是当出现重复值的情况下,默认取他们排名次序值(这里的第1名、第2名)的平均值。也就是说索引0和索引1对应的值1统一排名为(1+2)/2 = 1.5。

后面类推…

3. method参数

上面对重复排名的处理方式就是取相同排名的平均数,但有时候这可能并不是我们想要的,所以rank函数提供了method的参数,通过设置method参数,可以控制自己想要的排名方式。
如果说这个rank函数要解决的是考试排名的问题,现在出现了有两个同学并列第一的情况:

  • method='average' (默认设置):那么这两个人就占据了前两名,分不出谁第 1,谁第 2,就把两人的名次算个平均数,都算 1.5 名,这样下一个人就是第3名。

  • method='max':两人并列第 2 名,下一个人是第 3 名。

  • method='min':两人并列第 1 名,下一个人是第 3 名。

  • method='dense':两人并列第 1 名,但下一个人是第 2 名。

  • method='first':那么试卷先被改出来的人是第 1 名,试卷后被改出来的是第 2 名。(这个例子并不严谨,实际会按照本来序列的显示顺序先后来排名)

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值