pandas中建立多級索引的方法
阿新 • • 發佈:2018-11-03
(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
多級索引的切片與普通索引類似。下載我們再講。