Weet iemand of het mogelijk is om de DataFrame.loc
methode te gebruiken om te selecteren uit een MultiIndex
? Ik heb het volgende DataFrame
en 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 DataFrame
waarmee 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 .loc
zoals 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