如何从MultiIndex中提取标签?

时间:2014-08-20 12:54:04

标签: python 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)

还有一些其他的' get'多索引的方法,但我不能让他们中的任何一个做我想做的事情(并且我不确定他们中是否有任何一个做了我需要的东西)

1 个答案:

答案 0 :(得分: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]])

和其他人一样。

相关问题