2012-04-04 16 views
2

Ich versuche, einen Pandas Multiindex zu verwenden, um eine Teilscheibe am Index der höchsten Ebene (Datum) auszuwählen und eine Liste auf den Index der zweiten Ebene anzuwenden (Aktiensymbol). I.e. unten möchte ich die Daten für AAPL und MSFT im Bereich d1:d2.So indexieren Sie mit einer Liste von Werten mit nur einem Label in einem Pandas MultiIndex

Die Teilscheibe funktioniert gut, es ist jedoch nicht klar, wie man sowohl AAPL als auch MSFT aus dem zweiten Index auswählt, während GOOG in der Mitte vermieden wird.

Wenn ich die Ebenen vertauschen, funktioniert es mit einem einzelnen Symbol, aber nicht mit einer Liste.

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 

Ich möchte ein d.h lange Tupel Liste Gebäude vermeiden .:

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

die Arbeit macht, wenn bis ix weitergegeben. Unten ist meine gewünschte Ausgabe.

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 

Danke, John

Antwort

3

Es funktioniert für mich mit Pandas 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

Danke, ich war Pandas 7.0 verwenden, funktioniert dies in 7.2. –

+0

Ja, das wurde zwischen 0.7.0 und 0.7.2 implementiert. –

Verwandte Themen