本文用到的表格内容如下:
排名前先来看一下原始情形:
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参数的取值只会在待排序的列有重复值时有效果。