python/API从多索引中提取特定列

python/API从多索引中提取特定列,python,python-3.x,pandas,dataframe,indexing,Python,Python 3.x,Pandas,Dataframe,Indexing,目前我有一个多索引,如下所示: MultiIndex(levels=[[2012, 2013, 2014, 2015, 2016, 2017, 2018], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]], labels=[[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3

目前我有一个多索引,如下所示:

MultiIndex(levels=[[2012, 2013, 2014, 2015, 2016, 2017, 2018], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]],
           labels=[[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6], [10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4]],
           names=['Date', 'Date'])
我希望得到标签的第二部分,不是
[0,0,1,1]
,而是
[10,11,0,1,2]
本身。最好的方法是什么

作为附加信息,我的数据帧当前看起来如下

df = 

                Date  Portfolio Value    SPY Values
Date Date                                          
2012 11   2012-11-30     1.002448e+06  1.003667e+06
     12   2012-12-28     9.817744e+05  9.887664e+05
2013 1    2013-01-25     1.042036e+06  1.061184e+06
     2    2013-02-22     1.050522e+06  1.072771e+06
     3    2013-03-29     1.094525e+06  1.106260e+06
     4    2013-04-26     1.130510e+06  1.117988e+06
     5    2013-05-31     1.145836e+06  1.154727e+06
     6    2013-06-28     1.146044e+06  1.131836e+06
     7    2013-07-26     1.190659e+06  1.194927e+06
     8    2013-08-30     1.138982e+06  1.155645e+06
     9    2013-09-27     1.182957e+06  1.193585e+06
     10   2013-10-25     1.248856e+06  1.242970e+06
     11   2013-11-29     1.292239e+06  1.278790e+06
     12   2013-12-27     1.320085e+06  1.298785e+06
2014 1    2014-01-31     1.266189e+06  1.258302e+06
     2    2014-02-28     1.304377e+06  1.316448e+06
     3    2014-03-28     1.297855e+06  1.310442e+06
     4    2014-04-25     1.298360e+06  1.316306e+06 etc...

我希望得到第二个
日期
索引,从11、12、1、2、3等开始。

您的
多索引
标签是
冻结数组
对象的
冻结列表

您只需通过常规列表索引访问第二个数组:

idx = pd.MultiIndex(levels=[[2012, 2013, 2014, 2015, 2016, 2017, 2018], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]],
                    labels=[[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6], [10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4]],
                    names=['Date', 'Date'])

res = idx.labels[1]

print(res)

FrozenNDArray([10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4], dtype='int8')

idx.labels[1]
?为什么索引中会有重复的名称?@jpp我不知道实现会这么简单,谢谢!如果你想把它变成一个答案,我会接受的it@jpp我试图从上一个数据框中获取当月的最后一个日期,我是这样做的:
a=df.sort\u values('date').groupby([df.date.dt.year,df.date.dt.month]).last()
,我以这个结果结束。如果你有办法让它更清楚,我将不胜感激!为了给社区增加更多的价值和背景,你能告诉我们一些你为什么想要访问标签的细节吗?我本来打算写一个答案,但认为对你的答案发表评论更合适。首先,这是正确的答案。然而,不确定OP是否真的想要这个。您很少希望通过自己指定标签来构造多索引。如果操作正确,标签只是值的因式分解,因此您可以执行
idx.levels[1][idx.labels[1]]
以获得与
idx.get_level_值(1)
相同的操作。我的观点是,我在质疑OP为什么要这么做。@piRSquared,这是一个很好的观点。另一点值得一提的是,
标签
并不总是一致的(如果您使用新值连接数据帧,我认为它们可以更改)。如果OP能确认一个新的需求,我会很高兴地删除这个。我认为你回答的问题很恰当,而且很有用。我会留下的。如果OP添加一些颜色(我问过),它可能会更有用。还有,你说得对。它可以做一些不可靠的事情。