【发布时间】:2012-04-18 13:31:32
【问题描述】:
我正在尝试使用 pandas 多索引在顶级索引(日期)处选择部分切片,并将列表应用于二级索引(股票代码)。 IE。下面我想要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
谢谢, 约翰
【问题讨论】:
标签: python pandas multi-index