更多文章,可通过微信公众号:Excel办公小技巧 查看
“ 用过sql中的row_number函数,习惯了他的方便,那么在pandas处理数据时,有没有类似的函数用来排序呢,当然也有,比如rank函数。”
rank(axis=0, method='average', numeric_only=None,
na_option='keep', ascending=True, pct=False)
默认情况下:axis=0表示按索引排序;ascending=True排序按升序排列;pct=False表示不输出百分比;na_option='keep'表示空值不做处理。
下面将通过数据来学习下rank函数下各参数作用:
01 method:你想怎么排
更改参数method的可选项,其他默认参数不更改:
-
first:表示按数值大小排列,如果数值相同时,按出现先后排序。如1,2,3,4,5,...,类似SQL中的row_number函数;
-
min:表示按数值大小排列,如果数值相同时,序号相同,但后面的序号仍按数值数目顺延,如1,2,2,4,5,...,类似SQL中的rank函数;
-
dense
:表示按数值大小排列,如果数值相同时,序号相同,同时后面的序号不受影响,如1,2,2,3,4,...,类似SQL中的dense_rank函数;
data['first']=data['数量'].rank(method='first' )
data['min']=data['数量'].rank(method='min' )
data['dense']=data['数量'].rank(method='dense')
结果如下:
另外两个可选项,method='max'时,相同的数值,按最大的序号输出。可以理解成,在first排序结果的基础上,数值相同时,两个数值都按最大序号输出;而method='average'时,两个数值按对应序号的均值输出。
02 ascending:谁小谁有理?
上面介绍method我们默认是升序排列,那么如果数量表示销售完成的订单数时,当然是完成的多的才要排前面,所以,ascending=False时,降序排列。
data['降序']=data['数量'].rank(method='min',ascending=False)
03 na_option:别把数据算丢了!
默认情况下,na_option='keep',空值未被考虑在内,那么,如果数量表示客服投诉数量时,数量为空的应该是排名最好的。因此,当na_option='top',表示空值排最前,na_option='bottom',表示空值排最后。
data['top']=data['数量'].rank(method='min',na_option='top')
data['bottom']=data['数量'].rank(method='min',na_option='bottom')
结果如下:
04 pct:算算分布?
pct默认=False,想输出数值所占的分布情况时,pct=True即可。
data['pct']=data['数量'].rank(method='min',pct=True)
结果如下: