最近在看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中的窗口函数来理解