pandas
中的 sort_values
函数类似于 SQL 中的 order by
,可以将数据集依据特定的字段进行排序。
可根据列数据,也可以根据行数据排序。
一、介绍
使用语法为:
df.sort_values(by='xxx', axis=0, ascending=True, inplace=False,
kind='quicksort', na_position='last', ignore_index=False, key=None)
参数:
by -- 指定列名(axis=0或者'index')或索引值(axis=1或者'columns')
axis -- 按行、按列,默认axis=0按指定列排序
ascending -- 是否升序 默认为True
inplace -- 是否修改原对象
kind -- 排序算法 快排quicksort、归并mergesort、堆排序heapsort、稳定排序stable,默认快排
na_position -- {'first', 'last'} 设定缺失值的显示位置
ignore_index -- 排序后是否重置索引
key -- 排序之前使用的函数 (version 1.1.0 后才有该参数)
二、实操
- 构建测试数据集
# 构建测试数据集
import numpy as np
import pandas as pd
df = pd.DataFrame({'col1':['A','A','B',np.nan,'D','C'],
'col2':[2,1,9,8,7,7],
'col3':[0,1,2,9,4,8]})
print(df)
'''
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 2
3 NaN 8 9
4 D 7 4
5 C 7 8
'''
- 按列排序
# 依据第一列排序 并将该列空值放在首位
df.sort_values(by='col1', na_position='first')
# 依据第二、三列倒序
df.sort_values(by=['col2', 'col3'], ascending=False)
# 替换原数据
df.sort_values(by='col1', inplace=True)
- 按行排序
# 按照索引值为0的行 即第一行的值来降序
x = pd.DataFrame({'x1':[1,2,2,3],
'x2':[4,3,2,1],
'x3':[3,2,4,1]})
print(x)
x.sort_values(by=0, ascending=False, axis=1)
'''
x2 x3 x1
0 4 3 1
1 3 2 2
2 2 4 2
3 1 1 3
'''
- 多列顺序
# 按第一列降序 第二列升序排列
df.sort_values(by=['col1', 'col2'], ascending=[False, True])
- 索引重置
df.sort_values(by='col1', ignore_index=True)
- key参数解释
data1 = pd.DataFrame({
'col1': [2, 1, 9, 8, 7, 4],
'col2': [0, 1, 9, 4, 2, 3],
'col3': ['a', 'e', 'F', 'B', 'c', 'D']
})
print(data1)
'''
col1 col2 col3
0 2 0 a
1 1 1 e
2 9 9 F
3 8 4 B
4 7 2 c
5 4 3 D
'''
# 默认字母排序 ASCII码
data1.sort_values(by='col3')
# 先转换为小写字母再排序
data1.sort_values(by='col3', key=lambda x: x.str.lower())