pandas中创建多级索引的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

多级索引的切片与普通索引类似。下载我们再讲。

猜你喜欢

转载自blog.csdn.net/HQ1356466973/article/details/83588993
今日推荐