Utiliser.loc avec un MultiIndex dans pandas?

est-ce que quelqu'un sait s'il est possible d'utiliser la base de données?méthode loc pour sélectionner à partir D'un MultiIndex? J'ai la base de données suivante et je voudrais pouvoir accéder aux valeurs situées dans les colonnes 'Dwell', aux indices de ('at', 1),('at', 3), ('at', 5), et ainsi de suite (non séquentiel).

j'aimerais pouvoir faire quelque chose comme data.loc[['at',[1,3,5]], 'Dwell'], similaire à la data.loc[[1,3,5], 'Dwell'] syntaxe pour un index régulier (qui renvoie une série de 3 valeurs Dwell).

Mon but est de sélectionner un sous-ensemble arbitraire de données, effectuer une analyse sur ce sous-ensemble, et ensuite mettre à jour les nouvelles valeurs avec les résultats de l'analyse. Je prévois d'utiliser la même syntaxe pour définir de nouvelles valeurs pour ces données, donc enchaîner les sélecteurs ne fonctionnerait pas vraiment dans ce cas.

Ici est une tranche de la DataFrame, je travaille avec:

         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  

Merci!

20
demandé sur kronosapiens 2014-06-26 20:31:32

2 réponses

si vous êtes sur la version 0.14, vous pouvez simplement passer un tuple à .loc comme ci-dessous:

df.loc[('at', [1,3,4]), 'Dwell']
18
répondu chrisb 2014-06-26 17:29:58

coupe transversale indexation:

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
8
répondu Rolando Max 2014-06-26 17:25:39