版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HQ1356466973/article/details/83588993
(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
多级索引的切片与普通索引类似。下载我们再讲。