Python数据分析

Python数据分析 知识量:13 - 56 - 232

7.3 数据排名><

rank()函数- 7.3.1 -

数据排名与数据排序有些相似,都是对数据的排列。不同的是,排名会新增一列,用来存放排名情况,而且排名从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密集排名,忽略并列占位

重复值排名取平均值- 7.3.2 -

当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

重复值排名取自然顺序- 7.3.3 -

当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

重复值排名取最小值- 7.3.4 -

当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。

重复值排名取最大值- 7.3.5 -

当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。

重复值密集排名- 7.3.6 -

当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大的值)。