創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元湘橋做網(wǎng)站,已為上家服務(wù),為湘橋各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108不懂Python中pandas的層級(jí)索引是什么?其實(shí)想解決這個(gè)問(wèn)題也不難,下面讓小編帶著大家一起學(xué)習(xí)怎么去解決,希望大家閱讀完這篇文章后大所收獲。
1、認(rèn)識(shí)層級(jí)索引
以下示例將創(chuàng)建一個(gè) Series 對(duì)象, 索引 Index 由兩個(gè)子 list 組成,第一個(gè)子 list 是外層索引,第二個(gè) list 是內(nèi)層索引:
>>> import pandas as pd >>> import numpy as np >>> obj = pd.Series(np.random.randn(12),index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) >>> obj a 0 -0.201536 1 -0.629058 2 0.766716 b 0 -1.255831 1 -0.483727 2 -0.018653 c 0 0.788787 1 1.010097 2 -0.187258 d 0 1.242363 1 -0.822011 2 -0.085682 dtype: float64
2、MultiIndex 索引對(duì)象
嘗試打印上面示例中 Series 的索引類型,會(huì)得到一個(gè) MultiIndex 對(duì)象,MultiIndex 對(duì)象的 levels 屬性表示兩個(gè)層級(jí)中分別有那些標(biāo)簽,codes 屬性表示每個(gè)位置分別是什么標(biāo)簽,如下所示:
>>> import pandas as pd >>> import numpy as np >>> obj = pd.Series(np.random.randn(12),index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) >>> obj a 0 0.035946 1 -0.867215 2 -0.053355 b 0 -0.986616 1 0.026071 2 -0.048394 c 0 0.251274 1 0.217790 2 1.137674 d 0 -1.245178 1 1.234972 2 -0.035624 dtype: float64 >>> >>> type(obj.index)>>> >>> obj.index MultiIndex([('a', 0), ('a', 1), ('a', 2), ('b', 0), ('b', 1), ('b', 2), ('c', 0), ('c', 1), ('c', 2), ('d', 0), ('d', 1), ('d', 2)], ) >>> obj.index.levels FrozenList([['a', 'b', 'c', 'd'], [0, 1, 2]]) >>> >>> obj.index.codes FrozenList([[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])
通??梢允褂?from_arrays() 方法來(lái)將數(shù)組對(duì)象轉(zhuǎn)換為 MultiIndex 索引對(duì)象:
>>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']] >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color')) MultiIndex([(1, 'red'), (1, 'blue'), (2, 'red'), (2, 'blue')], names=['number', 'color'])
其他常用方法見下圖:
3、提取值
對(duì)于這種有多層索引的對(duì)象,如果只傳入一個(gè)參數(shù),則會(huì)對(duì)外層索引進(jìn)行提取,其中包含對(duì)應(yīng)所有的內(nèi)層索引,如果傳入兩個(gè)參數(shù),則第一個(gè)參數(shù)表示外層索引,第二個(gè)參數(shù)表示內(nèi)層索引,示例如下:
>>> import pandas as pd >>> import numpy as np >>> obj = pd.Series(np.random.randn(12),index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) >>> obj a 0 0.550202 1 0.328784 2 1.422690 b 0 -1.333477 1 -0.933809 2 -0.326541 c 0 0.663686 1 0.943393 2 0.273106 d 0 1.354037 1 -2.312847 2 -2.343777 dtype: float64 >>> >>> obj['b'] 0 -1.333477 1 -0.933809 2 -0.326541 dtype: float64 >>> >>> obj['b', 1] -0.9338094811708413 >>> >>> obj[:, 2] a 1.422690 b -0.326541 c 0.273106 d -2.343777 dtype: float64
4、交換分層與排序
MultiIndex 對(duì)象的 swaplevel() 方法可以交換外層與內(nèi)層索引,sortlevel() 方法會(huì)先對(duì)外層索引進(jìn)行排序,再對(duì)內(nèi)層索引進(jìn)行排序,默認(rèn)是升序,如果設(shè)置 ascending 參數(shù)為 False 則會(huì)降序排列,示例如下:
>>> import pandas as pd >>> import numpy as np >>> obj = pd.Series(np.random.randn(12),index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) >>> obj a 0 -0.110215 1 0.193075 2 -1.101706 b 0 -1.325743 1 0.528418 2 -0.127081 c 0 -0.733822 1 1.665262 2 0.127073 d 0 1.262022 1 -1.170518 2 0.966334 dtype: float64 >>> >>> obj.swaplevel() 0 a -0.110215 1 a 0.193075 2 a -1.101706 0 b -1.325743 1 b 0.528418 2 b -0.127081 0 c -0.733822 1 c 1.665262 2 c 0.127073 0 d 1.262022 1 d -1.170518 2 d 0.966334 dtype: float64 >>> >>> obj.swaplevel().index.sortlevel() (MultiIndex([(0, 'a'), (0, 'b'), (0, 'c'), (0, 'd'), (1, 'a'), (1, 'b'), (1, 'c'), (1, 'd'), (2, 'a'), (2, 'b'), (2, 'c'), (2, 'd')], ), array([ 0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11], dtype=int32))
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python中pandas的層級(jí)索引是什么內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!