一、列表 list --> sort()
1.1 升序、降序 reverse
list_ = ['Facebook', 'Google','Wechat', 'Baidu', 'Taobao','Jingdong']
print("原始列表:",list_,"\n")
list_.sort()
print("默认排序:",list_)
list_.sort(reverse=True)
print(" 降序:",list_)
1.2 自定义排序(使用参数key)
list_.sort(reverse=True,key=lambda x:len(x))
print("按照字符串长度排序(降序):",list_)
list_.sort(key=lambda x:x[1])
print("按照第二个字母排序(升序):",list_)
list_ = ['Facebook', 'Google','Wechat', 'Baidu', 'Taobao','Jingdong']
list_.sort(key=lambda x:1)
print(" 不排序,但要使用sort函数:",list_)
MySortList = ['Taobao','Jingdong','Baidu','Wechat','Facebook', 'Google']
MySortDict = dict([[i,MySortList.index(i)] for i in MySortList])
list_.sort(key=lambda x:MySortDict[x])
print(" 指定顺序:",list_)
二、字典 dict --> sorted
- sorted() 同样可以作用于列表,且两者参数类似
- list.sort() == sorted(list)
- 同样,sort()可以适用于字典
dict_ = {
'斗罗大陆': '小舞',
'斗破苍穹': "云韵",
'狐妖小红娘': '涂山雅雅',
'天行九歌': '焰灵姬',
}
print(" 原始字典:",dict_,'\n')
print("直接排序(默认按key值):",sorted(dict_))
print(" 按values排序:",sorted(dict_.values()))
print(" 按键值对排序:",sorted(dict_.items()))
print(" 按 values 长度排序:",sorted(dict_.items(),key=lambda x:len(x[1])))
三、Dataframe 排序
import pandas as pd
df = pd.DataFrame(
{
"A":[1,3,5,7,9],
"D":[1,2,3,4,5],
"C":['a','d','c','d','b'],
"B":[2,4,6,8,10]
},
index=list("acbed")
)
3.1 索引排序 sort_index()
sort_index(
axis = 0, # 0按照行名;1按照列名
level = None, # 默认None,否则按照给定的level顺序排列
ascending = True, # 默认True升序;False降序
inplace = False, # 默认False,否则排序之后的数据直接替换原来的dataframe
kind = 'quicksort', # 排序方法,{'quicksort','mergesort','heapsort'},默认'quicksort'。(似乎不用太关心)
na_position = 'last', # 缺失值默认排在最后{'first','last'}
sort_remaining = True, # ************
by = None # 按照某一列或几列数据进行排序,这里by参数不建议使用
)
df.sort_index(
axis = 0,
ascending = True,
)
df.sort_index(
axis = 1,
ascending = True,
)
3.2 值排序 sort_values()
sort_values(
by = [columns], # 参考排序的列
axis = 0, # 0按照行名;1按照列名
ascending = True, # 布尔型,True则升序,如果by=['列名1','列名2'],则该参数可以是[True, False],即第一字段升序,第二个降序。
inplace = False, # 默认False,否则排序之后的数据直接替换原来的dataframe
kind = 'quicksort', # 排序方法,{'quicksort','mergesort','heapsort'},默认'quicksort'。(似乎不用太关心)
na_position = 'last' # 缺失值的位置{'first','last'}
)
- 针对C列进行升序的基础上再对D列进行降序
- 即在C列有相同值的情况下,D列进行降序
df.sort_values(by=['C','D'],ascending=[True,False])
3.3 dataframe 自定义排序
from pandas.api.types import CategoricalDtype
3.3.1 单变量自定义排序
c_sort = CategoricalDtype(
['a','d','c'],
ordered=True
)
df['C'] = df['C'].astype(c_sort)
df.sort_values(by=['C'])
3.3.2 多变量自定义排序
cat_B = CategoricalDtype(
[8,4],
ordered=True
)
cat_C = CategoricalDtype(
['a','d','c'],
ordered=True
)
df['B'] = df['B'].astype(cat_B)
df['C'] = df['C'].astype(cat_C)
df.sort_values(by=['C','B'])