关于Python中rank()函数的理解
关于Python中rank()函数的理解
刚开始学习《利⽤Python进⾏数据分析》这本书,当学习到对Serises和Dataframe进⾏排名的时候,有些疑惑,去⽹上搜索了很多关于这⽅⾯的解释,要么就是⼀两句带过,要么就是照搬书上的例⼦与结果,把我们这些刚⼊门的⼩⽩当成了⾼⼿,所以我打算⾃⼰认真的写⼀篇关于rank函数的简要解释说明。这是我第⼀次在CSDN上写博客,如果有不对的地⽅,可以留⾔,我会认真改正。页⾯做的很简单,望⼤家谅解。
Rank()函数
Rank也就是所说的”排名“,是指对数组从1到有效数据点总数分配名次的操作。
默认情况下,rank通过将平均排名分配到每个组来打破平级关系:
初始化⼀个序列
import pandas as pd
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
运⾏结果分析:
元素索引排名
-
51#1
05#2
24#3
43#4
46#5
70#6
72#7
根据上⾯的表格可以看出,索引0对应的元素排名为6,但是使⽤rank()会对排名求平均值,也就是说有N歌相同的元素,排名会相加并除以N,所以说索引0对应的元素最终排名为6.5;索引1对应的元素排名为1,所以它对应的排名值为1.0,以此类推得出上述运⾏结果。
rank(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
运⾏结果分析:
元素索引排名
-51#1
05#2
24#3
43#4
46#5
70#6
72#7
结合上⾯的表格,我们拿索引为0的元素举例说明,可以看出索引0的排名为6,但是注意,当传⼊‘first’是就意味着不会对排名进⾏平均取值,所以即使有相同的元素,也会按照谁先出现就把谁排在前⾯(是不是有点像上学期间考试的成绩排名?按姓名字母排序,即使你俩分数⼀样)所以它对应的值为6.0,以此类推,在这⾥不再赘述。
rank(method = ‘max’)
这⾥method的参数变为了 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
运⾏结果分析:
元素索引排名
-51#1
05#2
24#3
元素索引排名
43#4
46#5
70#6
72#7
以索引为0的元素为例,它对应的元素是7,排名为6,但是它有⼀个和它⼀样的元素,排名为7,所以这⾥取最⼤的排名,也就是7,所以运⾏结果中索引为0对应的值为7.0,剩下的元素同理,这⾥不再赘述。
rank(method = ‘min’)
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
运⾏结果分析:
元素索引排名
-51#1
05#2
24#3
43#4
46#5
70#6
72#7
还是以索引为0的元素为例,它对应的值为7,排名为6,即使后⾯有和它值相同的元素,排名取它们其中最⼩的那个,所以运⾏结果中索引为0对应的值为6,其余元素以此类推,这⾥不再赘述。
rank(ascending = False, method = ‘max’)
这个函数相较于上⾯的函数,多传⼊了⼀个ascending,它的意思是”升序“的意思,这⾥取值为 False,意为对元素进⾏降序排序;⽽且method的值取为 max,与上⾯的max作⽤相同。
obj.rank(ascending=False,method='max')
运⾏结果:
0 2.0
1 7.0
2 2.0
3 4.0
rank函数的用法
4 5.0
5 6.0
6 4.0
dtype: float64
运⾏结果分析:
元素索引排名
-51#7
05#6
24#5
43#3
46#4
70#1
72#2
可以看出,与上⾯的表格相⽐,最⼤的变化是元素进⾏了降序排序,所以名次也发⽣了变化。我还是拿索引为0的元素拿来举例(因为它太有代表性了,所以我总是⽤它来说明),它现在对应的排名为6,但是这⾥method取的值为max,所以当有相同的元素时,取排名最⼤的那个,所以它的值为2.0,剩下的元素也是⼀样,这⾥不再赘述。
rank(ascending = False, method = ‘min’)
这个函数相较于上⾯的函数,method的值变为了min,与上⾯的min作⽤相同。
obj.rank(ascending=False,method='min')
运⾏结果:
0 1.0
1 7.0
2 1.0
3 3.0
4 5.0
5 6.0
6 3.0
dtype: float64
运⾏结果分析:
元素索引排名
-51#7
05#6
24#5
43#3
46#4
70#1
72#2
元素索引排名
索引值为0的元素对应的排名为1,即使后⾯有相同的元素,取它们之中最⼩的排名,所以它对应的值为1.0,其余元素排名以此类推,这⾥不再赘述。
DataFrame.rank()
它会对DataFrame的0轴进⾏排名(不了解轴的可以去看⼀下Numpy中ndarray的解释),可以把DataFrame理解为⼀个⼆维数组,对0轴排名也就是按着纵向排名
我们先初始化⼀个DataFrame
frame = pd.DataFrame({'b' : [4.3, 7, -3, 2], 'a' : [0, 1, 0, 1],'c' : [-2, 5, 8, -2.5]})
frame
运⾏结果:
frame.rank()
运⾏结果:
运⾏结果分析:
先对columns='b’的数据进⾏排名,然后对columns='a’排名,最后对column='c’进⾏排名,排名规则与上⾯的Series规则⼀致,这⾥不再赘述。
frame.rank(axis=‘columns’)
这⾥传⼊了⼀个参数 axis,它的意思是"轴"的意思,上⾯的那个如果括号⾥不加,默认是对0轴进⾏排名(等价于axis=0),这个参数传⼊的值 columns 意为对‘b’,‘a’,'c’这⼏个列进⾏排名(横向排名)。
frame.rank(axis='columns')
运⾏结果:
运⾏结果分析:
先对index=0这⼀⾏进⾏排名,其次对index=2排名,最后对index=3进⾏排名,排名规则也是和上⾯的⼀样。
《利⽤Python进⾏数据分析》

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。