pandas操作复习_06_列降序排序
前情提要
已经计算出了总分,那么接下来肯定要进行排名。好在pandas中对dataframe的排序也有现成的方法,何老师准备使用rank()方法来进行排序。
数据展示
倘若无数据,可拷贝以下数据到一个xlsx的文件中使用
学号 | 姓名 | 班级 | 语文 | 数学 | 英语 | 音乐 | 美术 | 体育 | sum | |
---|---|---|---|---|---|---|---|---|---|---|
0 | A01 | 饶秀颖 | 1班 | 35.0 | 45.0 | 55.0 | 95.0 | 95.0 | 95.0 | 240.0 |
1 | A02 | 于俊远 | 1班 | 38.0 | 53.0 | 46.0 | 97.0 | 98.0 | 95.0 | 245.6 |
2 | A03 | 王五 | 1班 | 54.0 | 46.0 | 38.0 | 97.0 | 99.0 | 97.0 | 247.1 |
3 | A08 | 冉颇 | 3班 | 34.0 | 54.0 | 60.0 | 96.0 | 98.0 | 99.0 | 248.3 |
4 | A09 | 夫余岚裳 | 3班 | 43.0 | 57.0 | 67.0 | 98.0 | 95.0 | 94.0 | 252.5 |
5 | A10 | 薛菁 | 3班 | 55.0 | 60.0 | 65.0 | 96.0 | 93.0 | 96.0 | 252.6 |
实际操作
基础步骤
包括导入模块、指定文件、获取数据等步骤
import pandas as pd
import numpy as np
import pathlib
file_path = pathlib.Path("/content/drive/MyDrive/Notebooks_data/score.xlsx")
data1 = pd.read_excel(file_path)
排序rank
我们先直接对整个dataframe
data1.rank()
out
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 sum 0 1.0 6.0 2.0 2.0 1.0 3.0 1.0 2.5 2.5 1.0 1 2.0 1.0 2.0 3.0 3.0 2.0 4.5 4.5 2.5 2.0 2 3.0 4.0 2.0 5.0 2.0 1.0 4.5 6.0 5.0 3.0 3 4.0 2.0 5.0 1.0 4.0 4.0 2.5 4.5 6.0 4.0 4 5.0 3.0 5.0 4.0 5.0 6.0 6.0 2.5 1.0 5.0 5 6.0 5.0 5.0 6.0 6.0 5.0 2.5 1.0 4.0 6.0
会发现:学号、姓名、班级这三列竟然也被排名了,以一种不为人知的方法(只是我懒得去搜)。但我们实际上只需要对数字进行排序,如果再要求严格一点,我们只想对sum这一列的总分分数进行排名。
# 我们尝试选择dataframe中的一列
data1["sum"].rank(numeric_only=True)
out
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
Name: sum, dtype: float64
我们发现会输出一个针对指定列的一个排序的series。但是实际上我们发现有一点不满意的地方:默认的排序是升序!也就是说,分数最低的反而是NO.1,这与我们日常使用的降序是不一样的!
降序排序rank(numeric_only=True, sacending=False)
data1["sum"].rank(numeric_only=True, ascending=False)
out
0 6.0
1 5.0
2 4.0
3 3.0
4 2.0
5 1.0
Name: sum, dtype: float64
# 添加数据
data1["rank"] = data1["sum"].rank(numeric_only=True, ascending=False, )
data1
out
学号 姓名 班级 语文 数学 英语 音乐 美术 体育 sum rank 0 A01 饶秀颖 1班 35.0 45.0 55.0 95.0 95.0 95.0 240.0 6.0 1 A02 于俊远 1班 38.0 53.0 46.0 97.0 98.0 95.0 245.6 5.0 2 A03 王五 1班 54.0 46.0 38.0 97.0 99.0 97.0 247.1 4.0 3 A08 冉颇 3班 34.0 54.0 60.0 96.0 98.0 99.0 248.3 3.0 4 A09 夫余岚裳 3班 43.0 57.0 67.0 98.0 95.0 94.0 252.5 2.0 5 A10 薛菁 3班 55.0 60.0 65.0 96.0 93.0 96.0 252.6 1.0
数据保存
data1.to_excel("/content/drive/MyDrive/Notebooks_data/score.xlsx", index=False)