パンダのマルチインデックスを使用して、最上位のインデックス (日付) で部分的なスライスを選択し、リストを第 2 レベルのインデックス (株式記号) に適用しようとしています。つまり、以下の範囲で AAPL と MSFT のデータが必要ですd1:d2
。
部分的なスライスは正常に機能しますが、途中で GOOG を回避しながら、2 番目のインデックスから AAPL と MSFT の両方を選択する方法が明確ではありません。
レベルを交換すると、単一のシンボルで機能しますが、リストでは機能しません。
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
ありがとう、ジョン