wake-up-neo.com

Verwendung von .loc mit einem MultiIndex in Pandas?

Weiß jemand, ob es möglich ist, mit der DataFrame.loc-Methode einen MultiIndex auszuwählen? Ich habe den folgenden DataFrame und möchte auf die Werte in den 'Dwell'-Spalten zugreifen können, die sich in den Indizes ('at', 1), ('at', 3), ('at', 5) Usw. befinden Ein (nicht sequentiell).

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

Mein Ziel ist es, eine beliebige Teilmenge der Daten auszuwählen, eine Analyse 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, sodass das Verketten von Selektoren in diesem Fall nicht wirklich funktioniert.

Hier ist ein Ausschnitt aus dem DataFrame, mit dem ich arbeite:

         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  

Vielen Dank!

28
kronosapiens

Wenn Sie mit Version 0.14 arbeiten, können Sie einfach einen Tupel wie folgt an .loc Übergeben:

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

Versuchen Sie die Querschnitt 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
12
Rolando Max