Pandas中的排名rank()函数详解

最近在看Pandas,Series和DataFrame的rank方法是实现排名的方法。对rank方法的解释懵懵懂懂,查了些资料也没有解释的非常清楚的。总结如下:

method解释
average默认:在名次一样(相等分组)中,为各个值分配平均排名,排名与排名之间存在跳跃
min使用整个分组的最小排名,排名与排名之间存在跳跃
max使用整个分组的最大排名,排名与排名之间存在跳跃
first按值在原始数据中的出现顺序分配排名,排名与排名之间存在跳跃
dense同一个分组的排名相同,排名与排名之间不存在跳跃

代码示例:
0、示例数组

In [8]:obj = pd.Series([7, -5, 7, 4, 2, 0, 4])
In [9]:obj
Out [11]:
0    7
1    -5
2    7
3    4
4    2
5    0
6    4
dtype: float64

1、默认是method = average,排名与排名之间存在跳跃

In [10]:obj = pd.Series([7, -5, 7, 4, 2, 0, 4])
In [11]:obj.rank()
Out [11]:
0    6.5	# index=0与index=2都是7,按正常排名的话,应该是6、7。此处是用(6+7)/2 = 6.5标识
1    1.0
2    6.5	# index=0与index=2都是7,按正常排名的话,应该是6、7。此处是用(6+7)/2 = 6.5标识
3    4.5	# index=3与index=6都是4,按正常排名的话,应该是4、5。此处是用(4+5)/2 = 4.5标识
4    3.0
5    2.0
6    4.5	# index=3与index=6都是4,按正常排名的话,应该是4、5。此处是用(4+5)/2 = 4.5标识
dtype: float64

2、method = min,排名与排名之间存在跳跃

In [12]:obj.rank(method='min')
Out [12]:
0    6.0	# index=0与index=2都是7,按正常排名的话,应该是6、7。此处是用最小排名6来标识
1    1.0
2    6.0	# index=0与index=2都是7,按正常排名的话,应该是6、7。此处是用最小排名6来标识
3    4.0	# index=3与index=6都是4,按正常排名的话,应该是4、5。此处是用最小排名4来标识
4    3.0
5    2.0
6    4.0	# index=3与index=6都是4,按正常排名的话,应该是4、5。此处是用最小排名4来标识
dtype: float64

3、method = max,排名与排名之间存在跳跃

In [13]:obj.rank(method='max')
Out [13]:
0    7.0	# index=0与index=2都是7,按正常排名的话,应该是6、7。此处是用最小排名7来标识
1    1.0
2    7.0	# index=0与index=2都是7,按正常排名的话,应该是6、7。此处是用最小排名7来标识
3    5.0	# index=3与index=6都是4,按正常排名的话,应该是4、5。此处是用最小排名5来标识
4    3.0
5    2.0
6    5.0	# index=3与index=6都是4,按正常排名的话,应该是4、5。此处是用最小排名5来标识
dtype: float64

4、method = first,排名与排名之间存在跳跃

In [14]:obj.rank(method='first')
Out [14]:
0    6.0	# index=0与index=2都是7,按正常排名的话,index=0先出现。此处是用排名6来标识
1    1.0
2    7.0	# index=0与index=2都是7,按正常排名的话,index=2后出现。此处是用排名7来标识
3    4.0	# index=3与index=6都是4,按正常排名的话,index=3先出现。此处是用排名4来标识
4    3.0
5    2.0
6    5.0	# index=3与index=6都是4,按正常排名的话,index=6后出现。此处是用排名5来标识
dtype: float64

5、method = dense,排名与排名之间不存在跳跃

In [15]:obj.rank(method='dense')
Out [15]:
0    5.0	# index=0与index=2都是7,按正常排名的话,不存在跳跃,应为5
1    1.0
2    5.0	# index=0与index=2都是7,按正常排名的话,不存在跳跃,应为5
3    4.0	# index=3与index=6都是4,按正常排名的话,不存在跳跃,应为4
4    3.0
5    2.0
6    4.0	# index=3与index=6都是4,按正常排名的话,不存在跳跃,应为4
dtype: float64
可以参照Hive中的窗口函数来理解
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值