Python DataFrame排序
简介
在数据分析和处理中,经常需要对DataFrame进行排序来整理数据或者得到排名信息。Python的pandas库提供了丰富的方法来对DataFrame进行排序操作。本文将详解DataFrame的排序操作,包括按列排序、按行排序、多列排序以及自定义排序函数等内容。
1. 按列排序
按列排序是将DataFrame中的数据按照某一列或多列的值进行升序或降序排序。在pandas中,可以使用sort_values
方法实现按列排序。
1.1 单列排序
下面是一个简单的示例,假设我们有一个DataFrame df
,包含”姓名”、”年龄”和”成绩”三列,需要按照”成绩”列进行降序排序。
import pandas as pd
data = {"姓名": ["张三", "李四", "王五", "赵六"],
"年龄": [20, 18, 19, 21],
"成绩": [90, 85, 95, 88]}
df = pd.DataFrame(data)
sorted_df = df.sort_values("成绩", ascending=False)
print(sorted_df)
运行结果如下:
姓名 年龄 成绩
2 王五 19 95
0 张三 20 90
3 赵六 21 88
1 李四 18 85
默认情况下,sort_values
方法按照指定列的值进行升序排序,如果需要降序排序,可以设置ascending
参数为False。
1.2 多列排序
有时候需要对DataFrame按照多列的值进行排序。可以通过传递一个包含多列名称的列表来实现多列排序。
import pandas as pd
data = {"姓名": ["张三", "李四", "王五", "赵六"],
"年龄": [20, 18, 19, 21],
"成绩": [90, 85, 95, 88]}
df = pd.DataFrame(data)
sorted_df = df.sort_values(["成绩", "年龄"], ascending=[False, True])
print(sorted_df)
运行结果如下:
姓名 年龄 成绩
2 王五 19 95
0 张三 20 90
3 赵六 21 88
1 李四 18 85
通过传递一个包含多列名称的列表,可以实现对多列的排序。在上面的示例中,首先按”成绩”列降序排列,如果”成绩”相同,则按”年龄”列升序排序。
2. 按行排序
除了按列排序,有时候也需要按行排序,将DataFrame的行按照某一列或多列的值进行升序或降序排序。在pandas中,可以使用sort_index
方法实现按行排序。
2.1 按指定列排序行
假设我们有一个DataFrame df
,包含”姓名”、”年龄”和”成绩”三列,需要按照”年龄”列进行升序排序。
import pandas as pd
data = {"姓名": ["张三", "李四", "王五", "赵六"],
"年龄": [20, 18, 19, 21],
"成绩": [90, 85, 95, 88]}
df = pd.DataFrame(data)
sorted_df = df.sort_values("年龄").reset_index(drop=True)
print(sorted_df)
运行结果如下:
姓名 年龄 成绩
0 李四 18 85
2 王五 19 95
1 张三 20 90
3 赵六 21 88
通过调用sort_values
方法可以按照指定的列对DataFrame进行升序排序,然后调用reset_index
方法重置索引,得到按行排序的DataFrame。
2.2 按索引排序行
除了按照指定列排序行,也可以直接按照DataFrame的索引进行排序。
import pandas as pd
data = {"姓名": ["张三", "李四", "王五", "赵六"],
"年龄": [20, 18, 19, 21],
"成绩": [90, 85, 95, 88]}
df = pd.DataFrame(data)
sorted_df = df.sort_index(ascending=False)
print(sorted_df)
运行结果如下:
姓名 年龄 成绩
3 赵六 21 88
2 王五 19 95
1 李四 18 85
0 张三 20 90
通过调用sort_index
方法,可以按照DataFrame的索引进行升序排序。
3. 自定义排序函数
如果需要自定义排序函数,可以通过key
参数传递一个函数给sort_values
方法,函数将被应用于排序的列或多列的值。
下面是一个示例,假设我们有一个DataFrame df
,包含”姓名”、”年龄”和”成绩”三列,需要按照”姓名”列的长度进行排序。可以定义一个函数name_length
,返回字符串长度,然后传递给sort_values
方法的key
参数。
import pandas as pd
data = {"姓名": ["张三", "李四", "王五", "赵六"],
"年龄": [20, 18, 19, 21],
"成绩": [90, 85, 95, 88]}
df = pd.DataFrame(data)
def name_length(name):
return len(name)
sorted_df = df.sort_values("姓名", key=name_length)
print(sorted_df)
运行结果如下:
姓名 年龄 成绩
1 李四 18 85
2 王五 19 95
0 张三 20 90
3 赵六 21 88
自定义的排序函数将应用于指定列的每个值,并根据函数返回的结果进行排序。
总结
本文介绍了Python中pandas库的DataFrame排序操作。通过sort_values
方法可以实现按列排序,可以按照单列或多列的值进行升序或降序排序。通过sort_index
方法可以实现按行排序,可以按照指定列或索引进行升序或降序排序。此外,还介绍了如何自定义排序函数,以满足个性化的排序需求。