pandas 排序 按指定顺序

在数据分析中,经常需要对数据进行排序操作,以便更好地理解数据的特点或者进行进一步分析。pandas 是一个强大的数据分析工具,提供了丰富的排序功能。本文将重点介绍如何使用 pandas 按照自定义的顺序进行排序。
按指定顺序排序
在 pandas 中,可以通过 sort_values 方法来对数据进行排序。默认情况下,sort_values 方法会按照数值大小进行排序,如果要按照自定义的顺序进行排序,可以通过 key 参数传入一个函数来实现。
假设有一个数据集如下:
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Cathy', 'David', 'Eve'],
'score': [85, 90, 75, 80, 95]
}
df = pd.DataFrame(data)
print(df)
输出为:
name score
0 Alice 85
1 Bob 90
2 Cathy 75
3 David 80
4 Eve 95
如果我们想按照自定义顺序 Eve, Bob, Alice, Cathy, David 对 name 列进行排序,可以这样实现:
custom_order = ['Eve', 'Bob', 'Alice', 'Cathy', 'David']
def custom_sort(x):
return custom_order.index(x)
df_sorted = df.sort_values(by='name', key=lambda x: x.map(custom_sort))
print(df_sorted)
输出为:
name score
4 Eve 95
1 Bob 90
0 Alice 85
2 Cathy 75
3 David 80
通过上述代码,我们成功按照自定义的顺序对 name 列进行了排序。
指定升序或降序排序
除了按照自定义顺序排序之外,pandas 还支持对数据进行升序或降序排序。可以通过 ascending 参数来指定排序的顺序,True 表示升序,False 表示降序。
以前面的数据集为例,我们可以按照 score 列进行降序排序:
df_sorted = df.sort_values(by='score', ascending=False)
print(df_sorted)
输出为:
name score
4 Eve 95
1 Bob 90
0 Alice 85
3 David 80
2 Cathy 75
通过设置 ascending=False,我们实现了对 score 列的降序排序。
多列按指定顺序排序
有时候需要对多列数据按照指定顺序进行排序。可以通过传入一个列表来指定多个列名,在 key 函数中对多个列进行排序。
假设有一个数据集如下:
data = {
'name': ['Alice', 'Bob', 'Cathy', 'David', 'Eve'],
'group': ['A', 'B', 'B', 'A', 'C'],
'score': [85, 90, 75, 80, 95]
}
df = pd.DataFrame(data)
print(df)
输出为:
name group score
0 Alice A 85
1 Bob B 90
2 Cathy B 75
3 David A 80
4 Eve C 95
如果我们想先按照 group 列的自定义顺序 C, B, A 进行排序,再按照 score 列进行降序排序,可以这样实现:
group_order = ['C', 'B', 'A']
def custom_sort_group(x):
return group_order.index(x)
df_sorted = df.sort_values(by=['group', 'score'], key=lambda x: x.map(custom_sort_group))
print(df_sorted)
输出为:
name group score
4 Eve C 95
1 Bob B 90
2 Cathy B 75
3 David A 80
0 Alice A 85
通过上述代码,我们先按照 group 列的自定义顺序进行排序,再按照 score 列进行降序排序。
总结
本文介绍了在 pandas 中按照指定顺序进行排序的方法,包括通过 key 函数对单列数据排序、指定升序或降序、多列按指定顺序排序等内容。掌握这些排序技巧能够让我们更灵活地处理数据,更高效地进行数据分析。
极客教程