首頁常見問題正文

一起認識層次化索引【Pandas相關知識】

更新時間:2023-01-29 來源:黑馬程序員 瀏覽量:

IT培訓班

  前面所涉及的Pandas對象都只有一層索引結(jié)構(行索引、列索引),又稱為單層索引,層次化索引可以理解為單層索引的延伸,即在一個軸方向上具有多層索引。

  對于兩層索引結(jié)構來說,它可以分為內(nèi)層索引和外層索引。以某些省市的面積表格為例,我們來認識一下什么是層次化索引,具體如圖3-6所示。

1674977702873_層次化索引圖示.jpg

  圖3-6 層次化索引圖示

  在圖3-6中,按照從左往右的順序,位于最左邊的一列是省的名稱,表示外層索引,位于中間的一列是城市的名稱,表示內(nèi)層索引,位于最右邊的一列是面積的大小,表示數(shù)據(jù)。

  Series和DataFrame均可以實現(xiàn)層次化索引,最常見的方式是在構造方法的index參數(shù)中傳入一個嵌套列表。接下來,以圖3-6為例,創(chuàng)建具有兩層索引結(jié)構的Series和DataFrame對象,具體如下:

  (1)創(chuàng)建具有兩層索引結(jié)構的Series對象,具體代碼如下。

   In [65]: import numpy as np
         import pandas as pd
         mulitindex_series = pd.Series([15848,13472,12073.8,
            7813,7446,6444,15230,8269],
              index=[['河北省','河北省','河北省','河北省',
                      '河南省','河南省','河南省','河南省'],
                     ['石家莊市','唐山市','邯鄲市','秦皇島市',
                      '鄭州市','開封市','洛陽市','新鄉(xiāng)市']])
         mulitindex_series
Out[65]:
河北省 石家莊市       15848.0
        唐山市       13472.0
        邯鄲市       12073.8
      秦皇島市         7813.0
河南省   鄭州市         7446.0
        開封市         6444.0
        洛陽市        15230.0
        新鄉(xiāng)市         8269.0

  上述示例中,在使用構造方法創(chuàng)建Series對象時候,index參數(shù)接收了一個嵌套列表來設置索引的層級,其中,嵌套的第一個列表會作為外層索引,而嵌套的第二個列表會作為內(nèi)層索引。

  (2)創(chuàng)建具有兩層索引結(jié)構的DataFrame對象,具體代碼如下。

   In [66]: import pandas as pd
         from pandas import DataFrame, Series
         # 占地面積為增加的列索引
         mulitindex_df = DataFrame({ ‘占地面積’ :[15848, 13472, 12073.8,
                                     7813, 7446, 6444, 15230, 8269]},
                         index=[['河北省','河北省','河北省','河北省',
                                 '河南省','河南省','河南省','河南省'],
                                ['石家莊市','唐山市','邯鄲市','秦皇島市',
                                 '鄭州市','開封市','洛陽市','新鄉(xiāng)市']])
         mulitindex_df
Out[66]:
                    占地面積
河北省      石家莊市  15848.0
           唐山市    13472.0
           邯鄲市    12073.8
          秦皇島市    7813.0
河南省       鄭州市    7446.0
            開封市    6444.0
            洛陽市   15230.0
            新鄉(xiāng)市    8269.0

  使用DataFrame生成層次化索引的方式與Series生成層次化索引的方式大致相同,都是對參數(shù)index進行設置。

  需要注意的是,在創(chuàng)建層次化索引對象時,嵌套函數(shù)中兩個列表的長度必須是保持一致的,否則將會出現(xiàn)ValueError錯誤。

  除了使用嵌套列表的方式構造層次化索引以外,還可以通過MultiIndex類的方法構建一個層次化索引。MultiIndex類提供了3種創(chuàng)建層次化索引的方法,具體如下:

  ◆MultiIndex.from_tuples():將元組列表轉(zhuǎn)換為MultiIndex。

  ◆MultiIndex.from_arrays():將數(shù)組列表轉(zhuǎn)換為MultiIndex。

  ◆MultiIndex.from_product():從多個集合的笛卡兒乘積中創(chuàng)建一個MultiIndex。

  使用上面的任一種方法,都可以返回一個MultiIndex類對象。在MultiIndex類對象中有三個比較重要的屬性,分別是levels、labels和names,其中,levels表示每個級別的唯一標簽,labels表示每一個索引列中每個元素在levels中對應的第幾個元素,names可以設置索引等級名稱。

分享到:
在線咨詢 我要報名
和我們在線交談!