2012-04-04 8 views
2

pandas multiindexを使用してトップレベルのインデックス(日付)で部分スライスを選択し、2番目のレベルのインデックスにリストを適用しようとしています。 (株記号)。私。私はAAPLとMSFTのデータをd1:d2にしたいと思っています。Pandas MultiIndexでラベルが1つしかない値のリストでインデックスを作成する方法

部分スライスはうまく機能しますが、途中でGOOGを避けながら、2番目のインデックスからAAPLとMSFTの両方を選択する方法が明確ではありません。

レベルを入れ替えると、1つのシンボルで動作しますが、リストでは動作しません。

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 

私は長いタプルリストすなわちの構築を避けたい:IXに渡されたときに作業を行い

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

。以下は私が望む出力です。

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 

おかげで、 ジョン

答えて

3

それはパンダ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' 
+0

ありがとう、私はパンダ7.0を使用していた、これは7.2で動作します。 –

+0

はいこれは0.7.0から0.7.2の間で実装されています。 –

関連する問題