如何从MultiIndex提取标签?
我只是想把一个多重索引里的信息提取出来,放到一个序列或者数组里。不太确定这是不是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'])
这些关键词包括 levels
、labels
和 names
。你可以通过下面的方式单独访问它们:
df.index.labels
这样就会得到
FrozenList([[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])
其他的也可以用类似的方法来访问。