Python数据分析 知识量:13 - 56 - 232
数据排名与数据排序有些相似,都是对数据的排列。不同的是,排名会新增一列,用来存放排名情况,而且排名从1开始。
数据排名需要使用rank()函数。它有6个参数:
axis 设置沿着哪个轴计算排名。(0表示纵轴;1表示横轴。默认为0,对行排名)
method 用于指定如何处理重复值。
numeric_only 是否仅计算数字型的columns,其值为布尔值。
na_option NaN值是否参与排序及如何排序(其值可以为:keep、top、bottom,默认为keep)
ascending 用于指定升(降)序,默认升序。
pct 是否以排名的百分比显示排名,其值为布尔值。(即所有排名与最大排名的百分比)
其中,method的取值和说明如下表所示:
method | 说明 |
---|---|
average(默认值) | 取重复值自然排名的和的平均值 |
first | 按出现的前后顺序排名(自然排名) |
min | 取重复值自然排名的最小值 |
max | 取重复值自然排名的最大值 |
dense | 密集排名,忽略并列占位 |
当rank()函数的参数method=average时,计算重复值的排名时,取重复值自然排名的和的平均值。
import pandas as pd df=pd.read_excel(r"D:\PythonTestFile\exam.xlsx",usecols=[0,4]) df['use_average']=df['Math'].rank(method='average') # 按average排名,并添加use_average列 print(df.sort_values(by='use_average')) # 重新按use_average列排序
运行结果为:
Name Math use_average 3 Olivia 44 1.0 1 Emma 55 2.5 7 Isabella 55 2.5 0 Noah 66 4.5 2 Noah 66 4.5 4 Liam 69 6.5 6 Liam 69 6.5 5 Sophia 96 8.0
Emma和Isabella自然排序是2和3,按average排名时,其排名就是(2+3)/2=2.5
当rank()函数的参数method=first时,计算重复值的排名时,取重复值的自然顺序。
import pandas as pd df=pd.read_excel(r"D:\PythonTestFile\exam.xlsx",usecols=[0,4]) df['use_first']=df['Math'].rank(method='first') print(df.sort_values(by='use_first'))
运行结果为:
Name Math use_first 3 Olivia 44 1.0 1 Emma 55 2.0 7 Isabella 55 3.0 0 Noah 66 4.0 2 Noah 66 5.0 4 Liam 69 6.0 6 Liam 69 7.0 5 Sophia 96 8.0
当rank()函数的参数method=min时,计算重复值的排名时,取重复值自然排名的最小值。
import pandas as pd df=pd.read_excel(r"D:\PythonTestFile\exam.xlsx",usecols=[0,4]) df['use_min']=df['Math'].rank(method='min') print(df.sort_values(by='use_min'))
运行结果为:
Name Math use_min 3 Olivia 44 1.0 1 Emma 55 2.0 7 Isabella 55 2.0 0 Noah 66 4.0 2 Noah 66 4.0 4 Liam 69 6.0 6 Liam 69 6.0 5 Sophia 96 8.0
Emma和Isabella的自然排序是2和3,都取最小值2。
当rank()函数的参数method=max时,计算重复值的排名时,取重复值自然排名的最大值。
import pandas as pd df=pd.read_excel(r"D:\PythonTestFile\exam.xlsx",usecols=[0,4]) df['use_max']=df['Math'].rank(method='max') print(df.sort_values(by='use_max'))
运行结果为:
Name Math use_max 3 Olivia 44 1.0 1 Emma 55 3.0 7 Isabella 55 3.0 0 Noah 66 5.0 2 Noah 66 5.0 4 Liam 69 7.0 6 Liam 69 7.0 5 Sophia 96 8.0
Emma和Isabella的自然排序是2和3,都取最大值3。
当rank()函数的参数method=dense时,计算重复值的排名时,采取密集排名方式,即相同数据的排名相同,其他依次加1,忽略并列排名的占位。
import pandas as pd df=pd.read_excel(r"D:\PythonTestFile\exam.xlsx",usecols=[0,4]) df['use_dense']=df['Math'].rank(method='dense') print(df.sort_values(by='use_dense'))
运行结果为:
Name Math use_dense 3 Olivia 44 1.0 1 Emma 55 2.0 7 Isabella 55 2.0 0 Noah 66 3.0 2 Noah 66 3.0 4 Liam 69 4.0 6 Liam 69 4.0 5 Sophia 96 5.0
虽然Emma和Isabella都排名第2,Noah位于第4行,但忽略并列占位,它仍然排名第3(认为它的Math是第3大的值)。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6