之前搜关于pandas rank()函数的帖子,好几个大哥都是照搬书,当然也有一些大神直接一顿操作+截图。我结合了书还有自己的理解,希望没有错误,也希望和我一样的新手能看懂。谢谢!!
1. rank()
默认情况下,rank() 通过将平均排名分配到每个组打破平级关系。也就是说,如果有两组数值一样,那他们的排名将会被加在一起再除2.
obj=pd.Series([3,5,-1,0,5,6])
print(obj)
print(obj.rank())
得到如图:
我们自己手动排一下,-1,0,3,5,5,6.所以-1是第1名,0是第2名,3是第3,5是第4,5是第5,6是第6. 两个5的排名分别是4和5。所以在默认的排法。他们都是4.5(平均数)。
2. rank(method=“first”)
####这种情况下没有小数点,因为出现同样的数字的时候,我们按先看到谁谁就是老大的原则。书面文字是:排名也可以根据他们在数据中的观察顺序进行分配:
因此,同样两个5,从上到下,我们先看到 index=1 的那个5,所以他排名要优先于 index=4 的那个5.
3. rank(method=“min”)与 “dense”
这两个有点类似但是还是有区别,我们导入一个新的obj。
obj=pd.Series([3,5,-1,0,5,5,6])
print(obj)
obj.rank(method="min")
前面很好理解,同时出现3个5,我们把它用最小的号码排名,那就是都并列为4.但是因为这3个5占了4,5,6三个坑位,下一个就只能为排名7了。
dense,翻译过来的意思就是稠密,它与min唯一的区别就是,重复的不会占坑位,因此,3个5还是排第4,6可以排第五名了,这个也是比较常用的排名,比如班级名次,有几个人并列第n名,不影响紧跟着的n+1名。所以dense总是连续的,即组间排名总是+1.不过只是会有重复的而已。
4. rank(method=“max”)
类似于min的占坑位,3个5占4,5,6三个坑位时,min取4,在method为“max”时就取6了,其他一样。
当然还可以顺序反过来,用 ascending=False
5 method=“average”
同样地,3个5占4,5,6三个坑, method=“average“就是取这三个的平均数(4+5+6)/3,后面的数还是排在坑外为7.