1. 引言
很多资料上对这个函数的翻译为:
默认情况下,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 名。(这个例子并不严谨,实际会按照本来序列的显示顺序先后来排名)