本文目錄一覽:
python 中sort—values函數
一、sort_values()函數用途
pandas中的sort_values()函數原理類似於SQL中的order by,可以將數據集依照某個欄位中的數據進行排序,該函數即可根據指定列數據也可根據指定行的數據排序。
二、sort_values()函數的具體參數
用法:
1DataFrame.sort_values(by=『##’,axis=0,ascending=True, inplace=False, na_position=『last’)
參數說明
by指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis若axis=0或’index’,則按照指定列中數據大小排序;若axis=1或’columns’,則按照指定索引中數據大小排序,默認axis=0
ascending是否按指定列的數組升序排列,默認為True,即升序排列
inplace是否用排序後的數據集替換原來的數據,默認為False,即不替換
na_position{『first’,『last’},設定缺失值的顯示位置
三、sort_values用法舉例
創建數據框
#利用字典dict創建數據框
import numpy as np
import pandas as pd
用python對10個數進行排序
sort_values(by, axis=0, ascending=True, inplace=False, kind=’quicksort’, na_position=’last’)
by: 可以填入字元串或者字元串組成的列表。也就是說,如果axis=0,那麼by=”列名”;如果axis=1,那麼by=”行名”。
axis: {0 or 『index』, 1 or 『columns』}, default 0,意思就是如果axis=0,就按照索引排序,即縱向排序;如果axis=1,則按列排序,即橫向排序。默認是axis=0。
ascending: 輸入布爾型,True是升序,False是降序,也可以可以是[True,False],即第一個欄位升序,第二個欄位降序 。
inplace: 輸入布爾型,是否用排序後的數據框替換現有的數據框(這個在之前的文章寫過很多次了~)
kind: 排序的方法,{『quicksort』, 『mergesort』, 『heapsort』},默認是使用『quicksort』。這個參數用的比較少,大家可以試一試。
na_position : {『first』, 『last』},缺失值的排序,也就說決定將缺失值放在數據的最前面還是最後面。first是排在前面,last是排在後面,默認是用last。
創建數據表:
scores= pd.DataFrame([[87,56,85],[46,87,97],[34,65,86]],
columns=[‘jack’, ‘rose’, ‘mike’])
scores
『rose』這一列進行降序排序:
df_sc=scores.sort_values(by=’rose’,ascending=False)
df_sc
『mike』這一列進行升序排序:
df_sc=scores.sort_values(by=’mike’,ascending=True)
df_sc
對第0行進行升序排序:
scores.sort_values(by=0,axis=1,ascending=True)
我們再嘗試對第1行進行升序,第0行進行降序:
scores.sort_values(by=[1,0],axis=1,ascending=[True,False]
深入理解python中的排序sort
進行一個簡單的升序排列直接調用sorted()函數,函數將會返回一個排序後的列表:
sorted函數不會改變原有的list,而是返回一個新的排好序的list
如果你想使用就地排序,也就是改變原list的內容,那麼可以使用list.sort()的方法,這個方法的返回值是None。
另一個區別是,list.sort()方法只是list也就是列表類型的方法,只可以在列表類型上調用。而sorted方法則是可以接受任何可迭代對象。
list.sort()和sorted()函數都有一個key參數,可以用來指定一個函數來確定排序的一個優先順序。比如,這個例子就是根據大小寫的優先順序進行排序:
key參數的值應該是一個函數,這個函數接受一個參數然後返回以一個key,這個key就被用作進行排序。這個方法很高效,因為對於每一個輸入的記錄只需要調用一次key函數。
一個常用的場景就是當我們需要對一個複雜對象的某些屬性進行排序時:
再如:
前面我們看到的利用key-function來自定義排序,同時Python也可以通過operator庫來自定義排序,而且通常這種方法更好理解並且效率更高。
operator庫提供了 itemgetter(), attrgetter(), and a methodcaller()三個函數
同時還支持多層排序
list.sort()和sorted()都有一個boolean類型的reverse參數,可以用來指定升序和降序排列,默認為false,也就是升序排序,如果需要降序排列,則需將reverse參數指定為true。
排序的穩定性指,有相同key值的多個記錄進行排序之後,原始的前後關係保持不變
我們可以看到python中的排序是穩定的。
我們可以利用這個穩定的特性來進行一些複雜的排序步驟,比如,我們將學生的數據先按成績降序然後年齡升序。當排序是穩定的時候,我們可以先將年齡升序,再將成績降序會得到相同的結果。
傳統的DSU(Decorate-Sort-Undecorate)的排序方法主要有三個步驟:
因為元組是按字典序比較的,比較完grade之後,會繼續比較i。
添加index的i值不是必須的,但是添加i值有以下好處:
現在python3提供了key-function,所以DSU方法已經不常用了
python2.x版本中,是利用cmp參數自定義排序。
python3.x已經將這個方法移除了,但是我們還是有必要了解一下cmp參數
cmp參數的使用方法就是指定一個函數,自定義排序的規則,和java等其他語言很類似
也可以反序排列
python3.x中可以用如下方式:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245155.html