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
函数对单列数据排序、指定升序或降序、多列按指定顺序排序等内容。掌握这些排序技巧能够让我们更灵活地处理数据,更高效地进行数据分析。