2

パンダのマルチインデックスを使用して、最上位のインデックス (日付) で部分的なスライスを選択し、リストを第 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

ありがとう、ジョン

4

1 に答える 1

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'
于 2012-04-05T01:04:36.750 に答える