需求
需求:用pandas 依据某列的值进行从小到大排名,排名从0开始,如果某列值相同则排名相同,总排名数小于记录条数。
实现
之前,用下面的方法来实现上面的需求,但是因为数据量太大了,我从晚上开始运行,到第二天来还没运行出来结果,后来直接OOM了…
后来,突然想到hive中rank()函数、DENSE_RANK()、ROW_NUMBER()函数了,这三个函数功能分别是:
RANK() 排序相同时会重复,总数不会变(两个满分,99分的是第三名)
DENSE_RANK() 排序相同时会重复,总数会减少(两个满分,99分的是第二名)
ROW_NUMBER() 会根据顺序计算(两个一百分会按照某种方式排第一第二)。
通过查询,pandas果然有相应的方法rank(),要使用method='dense’才能满足我上面的需求。