.loc gebruiken met een MultiIndex in panda’s

Weet iemand of het mogelijk is om de DataFrame.locmethode te gebruiken om te selecteren uit een MultiIndex? Ik heb het volgende DataFrameen zou graag toegang willen hebben tot de waarden in de Dwell-kolommen, op de indices van ('at', 1), ('at', 3), ('at', 5), enzovoort (niet-opeenvolgend).

Ik zou graag iets als data.loc[['at',[1,3,5]], 'Dwell']kunnen doen, vergelijkbaar met de data.loc[[1,3,5], 'Dwell']syntaxis voor een reguliere index (die een 3-delige reeks Dwell-waarden retourneert).

Mijn doel is om een ​​willekeurige subset van de gegevens te selecteren, een analyse alleen op die subset uit te voeren en vervolgens de nieuwe waarden bij te werken met de resultaten van de analyse. Ik ben van plan dezelfde syntaxis te gebruiken om nieuwe waarden voor deze gegevens in te stellen, dus het koppelen van selectors zou in dit geval niet echt werken.

Hier is een deel van het DataFramewaarmee ik werk:

        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  

Antwoord 1, autoriteit 100%

Als je versie 0.14 gebruikt, kun je eenvoudig een tuple doorgeven aan .loczoals hieronder:

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

Antwoord 2, autoriteit 26%

Probeer de doorsnedeindexeren:

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

Antwoord 3

Over het algemeen hebben MultiIndex-sleutels de vorm van tupels. Bijvoorbeeld:

In [6]: df.loc[('at', 1),'Dwell']
Out[6]: 180

In jouw geval zou je een lijst met tuplesmoeten doorgeven. Het volgende werkt bijvoorbeeld zoals je zou verwachten:

In [7]: df.loc[ [('at', 1),('at', 3),('at', 5)], 'Dwell']
Out[7]:
          Dwell
QGram                                                           
at    1    180
at    3    180 
at    5     80  

Other episodes