pandas的排序和排名的具體使用
有的時(shí)候我們可以要根據(jù)索引的大小或者值的大小對(duì)Series和DataFrame進(jìn)行排名和排序。
一、排序
pandas提供了sort_index方法可以根據(jù)行或列的索引按照字典的順序進(jìn)行排序
a、Series排序
1、按索引進(jìn)行排序
#定義一個(gè)Series s = Series([1,2,3],index=["a","c","b"]) #對(duì)Series的索引進(jìn)行排序,默認(rèn)是升序 print(s.sort_index()) ''' a 1 b 3 c 2 ''' #對(duì)索引進(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"]) #對(duì)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 ''' #對(duì)Seires的值進(jìn)行降序排序 print(s.sort_values(ascending=False)) ''' e 7.0 b 2.0 c 1.0 d 0.0 a NaN '''
對(duì)值進(jìn)行排序的時(shí)候,無(wú)論是升序還是降序,缺失值(NaN)都會(huì)排在最后面。
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
'''
注意:對(duì)DataFrame的值進(jìn)行排序的時(shí)候,我們必須要使用by指定某一行(列)或者某幾行(列),如果不使用by參數(shù)進(jìn)行指定的時(shí)候,就會(huì)報(bào)TypeError: sort_values() missing 1 required positional argument: 'by'。使用by參數(shù)進(jìn)行某幾列(行)排序的時(shí)候,以列表中的第一個(gè)為準(zhǔn),可能后面的不會(huì)生效,因?yàn)橛械臅r(shí)候無(wú)法做到既對(duì)第一行(列)進(jìn)行升序排序又對(duì)第二行(列)進(jìn)行排序。在指定行值進(jìn)行排序的時(shí)候,必須設(shè)置axis=1,不然會(huì)報(bào)錯(cuò),因?yàn)槟J(rèn)指定的是列索引,找不到這個(gè)索引所以報(bào)錯(cuò),axis=1的意思是指定行索引。
二、排名
排名和排序有點(diǎn)類(lèi)似,排名會(huì)有一個(gè)排名值(從1開(kāi)始,一直到數(shù)組中有效數(shù)據(jù)的數(shù)量),它與numpy.argsort的間接排序索引差不多,只不過(guò)它可以根據(jù)某種規(guī)則破壞平級(jí)關(guān)系。
a、Series的排名
s = Series([1,3,2,1,6],index=["a","c","d","b","e"]) #默認(rèn)是根據(jù)值的大小進(jìn)行平均排名 ''' 1是最小的,所以第一個(gè)1排在第一,第二個(gè)1排在第二 因?yàn)槿〉氖瞧骄琶?,所?的排名為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使用整個(gè)分組的最小排名,max是用整個(gè)分組的最大排名,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一樣。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用python庫(kù)matplotlib繪制不同的圖表
這篇文章主要介紹了利用python庫(kù)matplotlib繪制不同的圖表,使用python中的matplotlib繪制圖表,主要分享繪制簡(jiǎn)單的曲線(xiàn)圖、單條曲線(xiàn)圖、多條曲線(xiàn)圖、直方圖以及散點(diǎn)圖的思路和用法,需要的朋友可以參考一下2022-03-03
Django中的CACHE_BACKEND參數(shù)和站點(diǎn)級(jí)Cache設(shè)置
這篇文章主要介紹了Django中的CACHE_BACKEND參數(shù)和站點(diǎn)級(jí)Cache設(shè)置,Python是最具人氣的Python web框架,需要的朋友可以參考下2015-07-07
一步一步教你用Python?pyglet仿制鴻蒙系統(tǒng)里的時(shí)鐘
pyglet是一個(gè)面向Python的跨平臺(tái)窗口、多媒體庫(kù),它可以用于創(chuàng)建游戲和多媒體應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于如何一步一步教你用Python?pyglet仿制鴻蒙系統(tǒng)里的時(shí)鐘,需要的朋友可以參考下2024-03-03
Python使用Pandas處理.xlsx文件的詳細(xì)教程
這篇文章主要介紹了如何使用Pandas庫(kù)處理.xlsx文件,包括環(huán)境配置、讀取、寫(xiě)入、數(shù)據(jù)操作和高級(jí)操作,Pandas提供了豐富的功能,使得數(shù)據(jù)處理變得簡(jiǎn)單高效,需要的朋友可以參考下2025-02-02
Python實(shí)現(xiàn)過(guò)濾單個(gè)Android程序日志腳本分享
這篇文章主要介紹了Python實(shí)現(xiàn)過(guò)濾單個(gè)Android程序日志腳本分享,本文講解了原理、實(shí)現(xiàn)代碼、使用方法、最新代碼等內(nèi)容,需要的朋友可以參考下2015-01-01
淺談python腳本設(shè)置運(yùn)行參數(shù)的方法
今天小編就為大家分享一篇淺談python腳本設(shè)置運(yùn)行參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12

