pandas的排序和排名的具體使用
有的時候我們可以要根據(jù)索引的大小或者值的大小對Series和DataFrame進(jìn)行排名和排序。
一、排序
pandas提供了sort_index方法可以根據(jù)行或列的索引按照字典的順序進(jìn)行排序
a、Series排序
1、按索引進(jìn)行排序
#定義一個Series s = Series([1,2,3],index=["a","c","b"]) #對Series的索引進(jìn)行排序,默認(rèn)是升序 print(s.sort_index()) ''' a 1 b 3 c 2 ''' #對索引進(jìn)行降序排序 print(s.sort_index(ascending=False)) ''' c 2 b 3 a 1 '''
2、按值進(jìn)行排序
s = Series([np.nan,1,7,2,0],index=["a","c","e","b","d"]) #對Series的值進(jìn)行排序,默認(rèn)是按值的升序進(jìn)行排序的 print(s.sort_values()) ''' d 0.0 c 1.0 b 2.0 e 7.0 a NaN ''' #對Seires的值進(jìn)行降序排序 print(s.sort_values(ascending=False)) ''' e 7.0 b 2.0 c 1.0 d 0.0 a NaN '''
對值進(jìn)行排序的時候,無論是升序還是降序,缺失值(NaN)都會排在最后面。
b、DataFrame排序
1、按索引進(jìn)行排序
a = np.arange(9).reshape(3,3) data = DataFrame(a,index=["0","2","1"],columns=["c","a","b"]) #按行的索引升序進(jìn)行排序,默認(rèn)按行,升序 print(data.sort_index()) ''' c a b 0 0 1 2 1 6 7 8 2 3 4 5 ''' #按行的索引按降序進(jìn)行排序 print(data.sort_index(ascending=False)) ''' c a b 2 3 4 5 1 6 7 8 0 0 1 2 ''' #按列升序的索引進(jìn)行排序 print(data.sort_index(axis=1)) ''' a b c 0 1 2 0 2 4 5 3 1 7 8 6 ''' #按列降序的索引進(jìn)行排序 print(data.sort_index(ascending=False)) ''' c a b 2 3 4 5 1 6 7 8 0 0 1 2 '''
2、按值進(jìn)行排序
a = [[9,3,1],[1,2,8],[1,0,5]] data = DataFrame(a, index=["0", "2", "1"], columns=["c", "a", "b"]) #按指定列的值大小順序進(jìn)行排序 print(data.sort_values(by="c")) ''' c a b 2 1 2 8 1 1 0 5 0 9 3 1 ''' print(data.sort_values(by=["c","a"])) ''' c a b 1 1 0 5 2 1 2 8 0 9 3 1 ''' #按指定行值進(jìn)行排序 print(data.sort_values(by="0",axis=1)) ''' b a c 0 1 3 9 2 8 2 1 1 5 0 1 '''
注意:對DataFrame的值進(jìn)行排序的時候,我們必須要使用by指定某一行(列)或者某幾行(列),如果不使用by參數(shù)進(jìn)行指定的時候,就會報TypeError: sort_values() missing 1 required positional argument: 'by'。使用by參數(shù)進(jìn)行某幾列(行)排序的時候,以列表中的第一個為準(zhǔn),可能后面的不會生效,因為有的時候無法做到既對第一行(列)進(jìn)行升序排序又對第二行(列)進(jìn)行排序。在指定行值進(jìn)行排序的時候,必須設(shè)置axis=1,不然會報錯,因為默認(rèn)指定的是列索引,找不到這個索引所以報錯,axis=1的意思是指定行索引。
二、排名
排名和排序有點類似,排名會有一個排名值(從1開始,一直到數(shù)組中有效數(shù)據(jù)的數(shù)量),它與numpy.argsort的間接排序索引差不多,只不過它可以根據(jù)某種規(guī)則破壞平級關(guān)系。
a、Series的排名
s = Series([1,3,2,1,6],index=["a","c","d","b","e"]) #默認(rèn)是根據(jù)值的大小進(jìn)行平均排名 ''' 1是最小的,所以第一個1排在第一,第二個1排在第二 因為取的是平均排名,所以1的排名為1.5 ''' print(s.rank()) ''' a 1.5 c 4.0 d 3.0 b 1.5 e 5.0 ''' #根據(jù)值在數(shù)組中出現(xiàn)的順序進(jìn)行排名 print(s.rank(method="first")) ''' a 1.0 c 4.0 d 3.0 b 2.0 e 5.0 '''
method參數(shù)除了,first按值在原始數(shù)據(jù)中的出現(xiàn)順序分配排名,還有min使用整個分組的最小排名,max是用整個分組的最大排名,average使用平均排名,也是默認(rèn)的排名方式。還可以設(shè)置ascending參數(shù),設(shè)置降序還是升序排序。
b、DataFrame的排名
a = [[9, 3, 1], [1, 2, 8], [1, 0, 5]] data = DataFrame(a, index=["0", "2", "1"], columns=["c", "a", "b"]) print(data) ''' c a b 0 9 3 1 2 1 2 8 1 1 0 5 ''' #默認(rèn)按列進(jìn)行排名 print(data.rank()) ''' c a b 0 3.0 3.0 1.0 2 1.5 2.0 3.0 1 1.5 1.0 2.0 ''' #按行進(jìn)行排名 print(data.rank(axis=1)) ''' c a b 0 3.0 2.0 1.0 2 1.0 2.0 3.0 1 2.0 1.0 3.0 '''
method參數(shù)和ascending參數(shù)的設(shè)置與Series一樣。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Django JWT Token RestfulAPI用戶認(rèn)證詳解
這篇文章主要介紹了Django JWT Token RestfulAPI用戶認(rèn)證詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01unittest+coverage單元測試代碼覆蓋操作實例詳解
這篇文章主要為大家詳細(xì)介紹了unittest+coverage單元測試代碼覆蓋操作的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04python學(xué)習(xí)字符串駐留與常量折疊隱藏特性詳解
這篇文章主要為大家介紹了python學(xué)習(xí)中字符串駐留與常量折疊的一些隱藏特性,并給大家進(jìn)行了詳細(xì)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09使用Python Typing模塊提升代碼可讀性和健壯性實例探索
這篇文章主要為大家介紹了使用Python Typing模塊提升代碼可讀性和健壯性實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python調(diào)用各大機(jī)器翻譯API的實現(xiàn)示例
本文主要介紹了Python調(diào)用各大機(jī)器翻譯API的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Python實現(xiàn)PyPDF2處理PDF文件的方法示例
這篇文章主要介紹了Python實現(xiàn)PyPDF2處理PDF文件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09