1. 程式人生 > >pandas中建立多級索引的方法

pandas中建立多級索引的方法

(1)方法一:使用pandas.MultiIndex.from_arrays()

In [25]: pd.MultiIndex.from_arrays([['a', 'a', 'b', 'b'],[1, 2, 1, 2]])
Out[25]:
MultiIndex(levels=[['a', 'b'], [1, 2]],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])

上例中,多級索引的對應關係是:

a  1
   2

b  1
   2

通俗的說就是a1,a2和b1,b2。

(2)方法2:使用pd.MultiIndex.from_tuples()

In [26]: pd.MultiIndex.from_tuples([('a', 1),('a', 2),('b', 1),('b', 2)])
Out[26]:
MultiIndex(levels=[['a', 'b'], [1, 2]],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])

(3)上面兩種方法都很煩,最簡單的方法是使用笛卡爾乘積:pd.MultiIndex.from_product()

In [27]: pd.MultiIndex.from_product([['a', 'b'], [1, 2]])
Out[27]:
MultiIndex(levels=[['a', 'b'], [1, 2]],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])

還可以為建立的索引指定名稱

In [28]: pop
Out[28]:
廣東  2017    3387964
    2018     658964
廣西  2017     458752
    2018     698256
湖南  2017     125874
    2018     658963
dtype: int64

In [29]: pop.index.names = [ '省份','年份']

In [30]: pop
Out[30]:
省份  年份
廣東  2017    3387964
    2018     658964
廣西  2017     458752
    2018     698256
湖南  2017     125874
    2018     658963
dtype: int64

 

既然行索引可以有多級的,那麼,自然而然地,列也有多級索引。下面我們建立一個多行多列的索引。舉例如下:

In [33]: index = pd.MultiIndex.from_product([['廣東', '廣西'], [2017, 2018]], n
    ...: ames=['province', 'year'])

In [34]: column = pd.MultiIndex.from_product([['IT行業','製造業'], ['軟體','硬
    ...: 件']], names=['行業', '崗位'])

我們模擬一組資料:

In [41]: data = np.random.randint(100,2000,size=(4,4))
In [42]: industry_data = pd.DataFrame(data, index=index,colum

In [43]: industry_data
Out[43]:
行業             IT行業         製造業
崗位               軟體    硬體    軟體    硬體
province year
廣東     2017     1632     847    200     1495
         2018     176     1179    718     973
廣西     2017     1995     1973   1096     1111
         2018     1209     668    1128     1330

多級索引的切片與普通索引類似。下載我們再講。