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)
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())
参考链接:Pandas之排序函数sort_values()
参考链接:pandas中sort_values()使用
参考链接:图解pandas的排序sort_values机制
参考链接:pandas.DataFrame.sort_values