拯救pandas計劃(3)——多級索引取值
回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書
拯救pandas計劃(3)——多級索引取值
數(shù)據(jù)需求
需求拆解
需求處理
方法一:
方法二:
總結(jié)
最近發(fā)現(xiàn)周圍的很多小伙伴們都不太樂意使用pandas,轉(zhuǎn)而投向其他的數(shù)據(jù)操作庫,身為一個數(shù)據(jù)工作者,基本上是張口pandas,閉口pandas了,故而寫下此系列以讓更多的小伙伴們愛上pandas。
系列文章說明:
系列名(系列文章序號)——此次系列文章具體解決的需求
平臺:
windows 10 python 3.8 pandas 1.2.4
數(shù)據(jù)需求
給定一份多級索引數(shù)據(jù),查找指定值。

需求拆解
數(shù)據(jù)提取在pandas中,或者說在python中就是索引式提取,在單層索引中采用·.lo或.iloc方法已經(jīng)非常常見了,然而在索引層次多了之后卻有點不知所措,也只需要將各個索引看成整體進(jìn)行提取就行。
需求處理
方法一:
這里先給出一個比較笨拙的方法,先將索引進(jìn)行重置為列數(shù)據(jù),通過列取得bool條件再進(jìn)行提取
datac.reset_index(inplace=True)
datac[(datac['School']?==?'S_2')?&?(datac['Class']?==?'C_3')]
可以看到通過該類方法可以成功取到對應(yīng)值
當(dāng)然也可以采用.query方法進(jìn)行條件篩選
datac.reset_index(inplace=True)
datac.query("School?==?'S_1'?and?Class?==?'C_3'")

方法二:
既然為多級索引,pandas也會有對應(yīng)的取值方式,既可以用鏈?zhǔn)秸{(diào)用的方式,也可以通過元組進(jìn)行提取,首先看看多級索引的輸出值:
是一個MultiIndex類型數(shù)據(jù),其元素都是元組,即也能通過元組的方式進(jìn)行索引調(diào)取
這兩種都一個共同的特點,從左到右,要先外層再內(nèi)層,否則會報KeyError錯誤
#?鏈?zhǔn)秸{(diào)用
datac.loc['S_1'].loc['C_1']

#?元組作為索引調(diào)用
datac.loc[('S_3',?'C_1'),?:]

tips:
多層索引,即列名上方有層次結(jié)構(gòu)也可以按這種方式進(jìn)行提取。
想越過外層索引提取內(nèi)層索引需要交換索引順序才能順利提取。
#?swaplevel?交換索引層級
datac.swaplevel(axis=0).loc[('C_1')]??#?axis=0:?index
總結(jié)
功夫再高,也怕菜刀。本例使用方法比較常規(guī),旨在鞏固基礎(chǔ)知識,當(dāng)下次遇到能夠想起可以直接索引取值而不用將索引重置為列值,以高效完成數(shù)據(jù)提取任務(wù)。
在茫茫人海中,我與你僅有一瞥,卻通過你的眼睛里看到汪洋大海,我相信心靈的碰撞能帶來更長久的歡快。
于二零二二年元月十三日作

小伙伴們,快快用實踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
-------------------?End?-------------------
往期精彩文章推薦:

歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群】
萬水千山總是情,點個【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
