首页 > 其他分享 >Pandas中的排名方法

Pandas中的排名方法

时间:2023-02-17 11:13:40浏览次数:33  
标签:5.0 1.0 4.0 6.5 3.0 排名 2.0 方法 Pandas

  排名是指对于数组从1到有效据点总数分配名次的操作。Series和DataFrame的rank方法是实现排名的方法,以下为rank方法的详解。

方法概述

  首先用Series模拟一份数据如下:

obj = pd.Series([7, -5, 7, 4, 2, 0, 4])
obj
0    7
1   -5
2    7
3    4
4    2
5    0
6    4
dtype: int64

  对其使用rank()方法进行排名

obj.rank()
0    6.5
1    1.0
2    6.5
3    4.5
4    3.0
5    2.0
6    4.5
dtype: float64

  可以观察到rank是用如下方法排序的,按排名整理一下如右表所示:

   数值	排名               数值	排名
0   7	6.5             1   -5	1.0
1   -5	1.0             5   0	2.0
2   7	6.5             4   2	3.0
3   4	4.5             6   4	4.5
4   2	3.0             3   4	4.5
5   0	2.0             2   7	6.5
6   4	4.5             0   7	6.5

  可以发现同一个值,其排名分配被均分,例如3号和6号的4被均分为都为4.5,0号和2号的7被均分为6.5,这是参数method='average'决定的,在默认情况下为此参数。

Split

rank中的method参数

  上一节中介绍到当不指定参数时,method默认为average,此表罗列了其余method参数。


排名中的平级关系打破方法

方法 描述
'average' 默认:在每个组中分配平均排名
'min' 对整个数组使用最小排名
'max' 对整个数组使用最大排名
'first' 按照值在数据中出现的次序分配排名
'dense' 类似于method='min',但组间排名总是增加1,而不是一个组中的相等元素的数量

Method中first的用法

  使用first进行排名:

obj.rank(method='first')
0    6.0
1    1.0
2    7.0
3    4.0
4    3.0
5    2.0
6    5.0
dtype: float64

  可以看到使用此参数时,不会存在均值,而是一个个按顺序依次排名,其中标签3的4排名为4.0,标签6的4排名为5.0是因为标签按顺序排列,标签3在标签6的前面,按照排名整理下如右表所示。

   数值	排名               数值	排名
0   7   6.0             1   -5	1.0
1   -5  1.0             5   0	2.0
2   7   7.0             4   2	3.0
3   4   4.0             3   4	4.0
4   2   3.0             6   4	5.0
5   0   2.0             0   7	6.0
6   4   5.0             2   7	7.0

Method中max与min的用法

  maxmin可以理解为相较于average而言,max将均值中相同排名的数值按照最大的那个排名取值,而min则相反。
  max的用法:

obj.rank(method='max')
0    7.0
1    1.0
2    7.0
3    5.0
4    3.0
5    2.0
6    5.0
dtype: float64

  min的用法:

obj.rank(method='min')
0    6.0
1    1.0
2    6.0
3    4.0
4    3.0
5    2.0
6    4.0
dtype: float64

  三者对比如下表所示,右表为整理后按排名排序:

   数值 average   max    min                 数值  average   max     min
0   7     6.5     7.0    6.0              1   -5    1.0     1.0     1.0
1   -5    1.0     1.0    1.0              5   0     2.0     2.0     2.0
2   7     6.5     7.0    6.0              4   2     3.0     3.0     3.0
3   4     4.5     5.0    4.0              3   4     4.5     5.0     4.0
4   2     3.0     3.0    3.0              6   4     4.5     5.0     4.0
5   0     2.0     2.0    2.0              0   7     6.5     7.0     6.0
6   4     4.5     5.0    4.0              2   7     6.5     7.0     6.0

Method中dense的用法

  该参数和average类似,相同数值相同排名,但是数值为整数且不会出现跳跃。

obj.rank(method='dense')
0    5.0
1    1.0
2    5.0
3    4.0
4    3.0
5    2.0
6    4.0
dtype: float64

  对比如下:

   数值	average  dense              数值  average  dense
0   7	  6.5     5.0            1   -5	   1.0      1.0
1   -5	  1.0     1.0            5   0	   2.0      2.0
2   7	  6.5     5.0            4   2	   3.0      3.0
3   4	  4.5     4.0            6   4	   4.5      4.0
4   2	  3.0     3.0            3   4 	   4.5      4.0
5   0	  2.0     2.0            2   7	   6.5      5.0
6   4	  4.5     4.0            0   7	   6.5      5.0

Split

rank中的ascending参数

  默认情况下是使用升序排序,将ascending设为False可以使用降序,值越大,排名越靠前:

obj.rank(ascending=False)
0    1.5
1    7.0
2    1.5
3    3.5
4    5.0
5    6.0
6    3.5
dtype: float64

  对比如下:

   数值  升排名	降排名              数值   升排名  降排名
0   7     6.5	 1.5             1   -5     1.0	   7.0
1   -5    1.0	 7.0             5   0      2.0	   6.0
2   7	  6.5    1.5             4   2      3.0	   5.0
3   4	  4.5    3.5             3   4      4.5	   3.5
4   2	  3.0    5.0             6   4      4.5	   3.5
5   0	  2.0    6.0             0   7      6.5	   1.5
6   4	  4.5    3.5             2   7      6.5	   1.5

Split

rank中的na_option参数

  该参数表示的是空值是否参与排名,可取keep,top,bottom,参数作用如下:

obj = pd.Series([7, -5, 7, 4, np.nan, 2, 0, 4])
obj
0    7.0
1   -5.0
2    7.0
3    4.0
4    NaN
5    2.0
6    0.0
7    4.0
dtype: float64

  使用keep时,将保留缺失值。

obj.rank(method='dense', na_option='keep')
0    5.0
1    1.0
2    5.0
3    4.0
4    NaN
5    3.0
6    2.0
7    4.0
dtype: float64

  使用top时,缺失值将排名第一。

obj.rank(method='dense', na_option='top')
0    6.0
1    2.0
2    6.0
3    5.0
4    1.0
5    4.0
6    3.0
7    5.0
dtype: float64

  使用bottom时,缺失值将排名最后。

obj.rank(method='dense', na_option='bottom')
0    5.0
1    1.0
2    5.0
3    4.0
4    6.0
5    3.0
6    2.0
7    4.0
dtype: float64

标签:5.0,1.0,4.0,6.5,3.0,排名,2.0,方法,Pandas
From: https://www.cnblogs.com/ToryRegulus/p/17127461.html

相关文章