pandas系列之数值排名

1,007 阅读3分钟

本文用到的表格内容如下:

image-20210721234905620.png 排名前先来看一下原始情形:

import pandas as pd
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df)

result:

   姓名     年龄  成绩
0  小明   23.0  78
1  小刚    NaN  89
2  小红  876.0  65
3  李华   65.0  89
4  小美    NaN  43
5  张三   34.0  90
6  李四    NaN  34
7  王五   98.5  87

数值排名和数值排序是相对应的,排名会新增一列,这一列用来存放数据的排名情况。排名是从1开始的。

排名主要使用rank()方法。该方法有2个参数,一个是 ascending,用来指明升序排列还是降序排列,默认是升序排列。另一个是method,用来指明待排列值有重复值时的处理情况

由于无重复值时method参数的作用显示不出来,所以这里以有重复值的数据进行展示,以便观察其参数值不同所产生的效果。

1 method取值为average

import pandas as pd
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df["成绩"].rank(method='average'))

result:

0    4.0
1    6.5
2    3.0
3    6.5
4    2.0
5    8.0
6    1.0
7    5.0
Name: 成绩, dtype: float64

这里解释一下。因为成绩这一列按照升序排列结果为[34, 43, 65, 78, 87, 89, 89, 90]

我们来看一些89这个数字,在成绩列表里面出现了两次,处于第7位和第8位的位置(这里从1开始算)。所以method='average'的意思就是对这里89的位置6和7取平均值,所以这一列中89所对应的第2行和第4行的排名都是6.5

2 method取值为first

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df["成绩"].rank(method='first'))

result:

0    4.0
1    6.0
2    3.0
3    7.0
4    2.0
5    8.0
6    1.0
7    5.0
Name: 成绩, dtype: float64

3 method取值为min

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df["成绩"].rank(method='min'))

result:

0    4.0
1    6.0
2    3.0
3    6.0
4    2.0
5    8.0
6    1.0
7    5.0
Name: 成绩, dtype: float64

这里解释一下。因为成绩这一列按照升序排列结果为[34, 43, 65, 78, 87, 89, 89, 90]

我们来看一些89这个数字,在成绩列表里面出现了两次,处于第7位和第8位的位置(这里从1开始算)。所以method='min'的意思就是对这里89的位置6和7取最小值,也就是6,所以这一列中89所对应的第2行和第4行的排名都是6

4 method 取值为max

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df["成绩"].rank(method='max'))

result:

0    4.0
1    7.0
2    3.0
3    7.0
4    2.0
5    8.0
6    1.0
7    5.0
Name: 成绩, dtype: float64
0    4.0
1    6.0
2    3.0
3    6.0
4    2.0
5    8.0
6    1.0
7    5.0
Name: 成绩, dtype: float64

这里解释一下。因为成绩这一列按照升序排列结果为[34, 43, 65, 78, 87, 89, 89, 90]

我们来看一些89这个数字,在成绩列表里面出现了两次,处于第7位和第8位的位置(这里从1开始算)。所以method='min'的意思就是对这里89的位置6和7取最大值,也就是7,所以这一列中89所对应的第2行和第4行的排名都是7

5默认值的情形

df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df["成绩"].rank())

result:

0    4.0
1    6.5
2    3.0
3    6.5
4    2.0
5    8.0
6    1.0
7    5.0
Name: 成绩, dtype: float64

通过比较可以看出,method参数的默认值为average

最后再次强调,以上介绍的method参数的取值只会在待排序的列有重复值时有效果。