2014-06-26 1 views
15

Weiß jemand, ob es möglich ist, die DataFrame.loc-Methode zu verwenden, um aus einem MultiIndex auszuwählen? Ich habe den folgenden DataFrame und möchte auf die Werte zugreifen können, die sich in den Spalten 'Verweilen' befinden, bei den Indizes ('at', 1), ('at', 3), ('at', 5) und so weiter (nicht sequenziell).Verwenden von .loc mit einem MultiIndex in Pandas?

Ich würde gerne in der Lage sein, etwas wie data.loc[['at',[1,3,5]], 'Dwell'] zu tun, ähnlich der data.loc[[1,3,5], 'Dwell'] Syntax für einen regulären Index (der eine 3-köpfige Reihe von Dwell-Werten zurückgibt).

Mein Zweck ist es, eine beliebige Teilmenge der Daten auszuwählen, einige Analysen nur für diese Teilmenge durchzuführen und dann die neuen Werte mit den Ergebnissen der Analyse zu aktualisieren. Ich plane, die gleiche Syntax zu verwenden, um neue Werte für diese Daten festzulegen, so dass Verkettungsselektoren in diesem Fall nicht wirklich funktionieren würden. Hier

ist ein Stück des Dataframe Ich arbeite mit:

  Char Dwell Flight ND_Offset Offset 
QGram               
at 0  a  100  120 0.000000  0 
     1  t  180  0 0.108363  5 
     2  a  100  120 0.000000  0 
     3  t  180  0 0.108363  5 
     4  a  20  180 0.000000  0 
     5  t  80  120 0.108363  5 
     6  a  20  180 0.000000  0 
     7  t  80  120 0.108363  5 
     8  a  20  180 0.000000  0 
     9  t  80  120 0.108363  5 
     10 a  120  180 0.000000  0 

Dank!

Antwort

15

Wenn Sie auf Version 0.14 sind, können Sie einfach ein Tupel zu .loc passieren, wie unten:

df.loc[('at', [1,3,4]), 'Dwell'] 
7

Versuchen Sie, die cross-section Indizierung:

In [68]: df.xs('at', level='QGram', drop_level=False).loc[[1,4]] 
Out[68]: 
     Char Dwell Flight ND_Offset Offset 
QGram           
at 1 t 180  0 0.108363  5 
     4 a  20  180 0.000000  0