如何从MultiIndex提取标签?

0 投票
1 回答
1948 浏览
提问于 2025-04-18 17:55

我只是想把一个多重索引里的信息提取出来,放到一个序列或者数组里。不太确定这是不是pandas特有的问题,还是说只是从一个python对象中提取属性的问题。

df = pd.DataFrame( { 'id' : np.arange(99,105) / 3,
                     'yr' : np.tile( np.array([2007,2008,2009]), 2 ),
                     'val': np.random.randn(6) } )

In [131]: df.set_index(['id','yr']).index

Out[131]: MultiIndex(levels=[[33, 34], [2007, 2008, 2009]],
                     labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]],
                     names=[u'id', u'yr'])

也就是说,我只想把以下信息提取到一个数组或者序列里:

labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]]

下面的代码可以获取到值,但我想要的是标签:

In [130]: df.set_index(['id','yr']).index.get_values()

Out[130]: array([(33, 2007), (33, 2008), (33, 2009), (34, 2007), (34, 2008), (34, 2009)], dtype=object)

还有一些其他的多重索引的'获取'方法,但我试了都没能实现我想要的效果(而且我也不确定这些方法是否能满足我的需求)。

1 个回答

3

你可以看到,df.index 会给你一个像字典一样的东西,它用关键词来存储值。

MultiIndex(levels=[[33, 34], [2007, 2008, 2009]],
           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]],
           names=[u'id', u'yr'])

这些关键词包括 levelslabelsnames。你可以通过下面的方式单独访问它们:

df.index.labels 

这样就会得到

FrozenList([[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])

其他的也可以用类似的方法来访问。

撰写回答