如何在Pandas MultiIndex中使用只有一个标签的值列表进行索引



我正在尝试使用pandas多索引来选择顶级索引(日期)的部分切片,并将列表应用于二级索引(股票符号)。也就是说,下面我想要在d1:d2范围内的AAPL和MSFT的数据。

部分切片效果良好,但尚不清楚如何从第二个指数中选择AAPL和MSFT,同时避免GOOG在中间。

如果我交换级别,它可以使用单个符号,但不能使用列表。

In [93]: print df
                 f1  f2  c1
date       sym
2012-01-01 AAPL  5.  2   3
           GOOG  1.  2   3
           MSFT  4.  2   3
2012-01-02 AAPL  8.  2   3
           GOOG  6.  2   3
           MSFT  7.  2   3
2012-01-03 AAPL  11  2   3
           GOOG  9.  2   3
           MSFT  10  2   3
In [94]: print df.ix[d1:d2].swaplevel(0,1).ix['AAPL']
            f1  f2  c1
date
2012-01-01  5   2   3
2012-01-02  8   2   3
In [95]: print df.ix[d1:d2].swaplevel(0,1).ix[['AAPL', 'MSFT']]
<blah balh>
TypeError: Expected tuple, got str

我想避免构建一个长元组列表,即:

t = [(d1, 'AAPL'), (d1, 'MSFT'), (d2, 'AAPL'), (d2, 'MSFT')]

它在传递给ix时确实有效。下面是我想要的输出。

In [103]: print df.ix[t]
                 f1  f2  c1
date       sym
2012-01-01 AAPL  5   2   3
           MSFT  4   2   3
2012-01-02 AAPL  8   2   3
           MSFT  7   2   3

谢谢,John

它适用于熊猫0.7.2:

print df.ix[d1:d2].swaplevel(0,1).ix[['AAPL', 'MSFT']]
                 f1  f2  c1
sym  date                  
AAPL 2012-01-01   5   2   3
MSFT 2012-01-01   4   2   3
AAPL 2012-01-02   8   2   3
MSFT 2012-01-02   7   2   3
import pandas; pandas.__version__
'0.7.2'

相关内容

  • 没有找到相关文章

最新更新