如何对 Pandas 系列进行排序?
Pandas 是 Python 语言中一个高效、灵活、易于使用的数据分析和数据操作工具库。而排序是在数据分析中非常重要的一步,因此,正确地对 Pandas 系列进行排序是非常必要的。
本文将介绍如何对 Pandas 系列进行排序,主要分为以下两种情况:
- 对 Series 对象的排序
- 对 DataFrame 对象的排序
更多Pandas相关文章,请阅读:Pandas 教程
对 Series 对象的排序
在 Pandas 中,Series 对象是一维标签数组,在进行排序时可以按照索引或者按照值进行排序。为了演示如何对 Series 对象进行排序,我们首先需要导入 Pandas 库并构造一个 Series 对象。
import pandas as pd
s = pd.Series([2, 1, 3, 5, 4])
print(s)
输出:
0 2
1 1
2 3
3 5
4 4
dtype: int64
我们可以看到,该 Series 对象包含了一些随机的整数,我们可以使用 sort_values() 函数按值对 Series 对象进行升序或降序排序。
# 按升序排序
s_ascend = s.sort_values()
print(s_ascend)
# 按降序排序
s_descend = s.sort_values(ascending=False)
print(s_descend)
输出:
1 1
0 2
2 3
4 4
3 5
dtype: int64
3 5
4 4
2 3
0 2
1 1
dtype: int64
我们可以看到,按升序排序后,Series 对象的值从小到大排序,按降序排序后,Series 对象的值从大到小排序。我们还可以按照索引进行排序,使用 sort_index() 函数即可。
# 按索引升序排序
s_index_ascend = s.sort_index()
print(s_index_ascend)
# 按索引降序排序
s_index_descend = s.sort_index(ascending=False)
print(s_index_descend)
输出:
0 2
1 1
2 3
3 5
4 4
dtype: int64
4 4
3 5
2 3
1 1
0 2
dtype: int64
我们可以看到,按升序排序后,Series 对象的索引从小到大排序,按降序排序后,Series 对象的索引从大到小排序。
对 DataFrame 对象的排序
在 Pandas 中,DataFrame 对象是一个表格型的数据结构,每列数据可以是不同的类型,而且可以有行标签和列标签。与 Series 对象一样,DataFrame 对象也可以按照列的值或者按照行的值进行排序。为了演示如何对 DataFrame 对象进行排序,我们首先需要导入 Pandas 库并构造一个 DataFrame 对象。
import pandas as pd
df = pd.DataFrame({'name':['Tom', 'Jerry', 'Jerry', 'Tom', 'Jenny'], 'score':[75, 86, 42, 91, 68]})
print(df)
输出:
name score
0 Tom 75
1 Jerry 86
2 Jerry 42
3 Tom 91
4 Jenny 68
我们可以看到,该 DataFrame 对象包含了学生的姓名和考试成绩,我们可以使用 sort_values() 函数按值对 DataFrame 对象进行升序或降序排序。需要注意的是,sort_values() 函数需要我们指定排序的列名。
# 按升序排序
df_ascend = df.sort_values(by='score')
print(df_ascend)
# 按降序排序
df_descend = df.sort_values(by='score', ascending=False)
print(df_descend)
输出:
name score
2 Jerry 42
4 Jenny 68
0 Tom 75
1 Jerry 86
3 Tom 91
name score
3 Tom 91
1 Jerry 86
0 Tom 75
4 Jenny 68
2 Jerry 42
我们可以看到,按升序排序后,DataFrame 对象的 score 列按照从小到大排序,按降序排序后,DataFrame 对象的 score 列按照从大到小排序。
我们也可以按照多列的值进行排序。假设我们需要先按照 score 列排序,如果分数相同,则按照 name 列排序。代码如下:
df_multisort = df.sort_values(by=['score', 'name'], ascending=[True, False])
print(df_multisort)
输出:
name score
2 Jerry 42
4 Jenny 68
0 Tom 75
1 Jerry 86
3 Tom 91
我们可以看到,DataFrame 对象先按照 score 列排序,如果分数相同,则按照 name 列排序。这样的排序方式更加灵活,能够更好的满足实际需求。
当然,还可以按照行的索引进行排序。使用 sort_index() 函数即可。
# 按索引升序排序
df_index_ascend = df.sort_index()
print(df_index_ascend)
# 按索引降序排序
df_index_descend = df.sort_index(ascending=False)
print(df_index_descend)
输出:
name score
0 Tom 75
1 Jerry 86
2 Jerry 42
3 Tom 91
4 Jenny 68
name score
4 Jenny 68
3 Tom 91
2 Jerry 42
1 Jerry 86
0 Tom 75
我们可以看到,按照索引升序排序后,DataFrame 对象的行索引按照从小到大排序,按照索引降序排序后,DataFrame 对象的行索引按照从大到小排序。这样的排序方式也能够满足一些实际需求。
结论
本文介绍了如何对 Pandas 系列进行排序,主要涉及到 Series 对象和 DataFrame 对象的排序。在对 Pandas 对象进行排序时,需要注意 sort_values() 函数和 sort_index() 函数的使用,以及对多列的排序和按照行索引的排序等问题。掌握了这些知识点后,我们就能够在数据分析中轻松地进行排序,提高了数据分析的效率。