Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using .loc with a MultiIndex in pandas?

Does anyone know if it is possible to use the DataFrame.loc method to select from a MultiIndex? I have the following DataFrame and would like to be able to access the values located in the Dwell columns, at the indices of ('at', 1), ('at', 3), ('at', 5), and so on (non-sequential).

I'd love to be able to do something like data.loc[['at',[1,3,5]], 'Dwell'], similar to the data.loc[[1,3,5], 'Dwell'] syntax for a regular index (which returns a 3-member series of Dwell values).

My purpose is to select an arbitrary subset of the data, perform some analysis only on that subset, and then update the new values with the results of the analysis. I plan on using the same syntax to set new values for these data, so chaining selectors wouldn't really work in this case.

Here is a slice of the DataFrame I'm working with:

         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   
like image 961
kronosapiens Avatar asked Jun 26 '14 16:06

kronosapiens


People also ask

Can I use ILOC and LOC together?

loc and iloc are interchangeable when labels are 0-based integers.


1 Answers

If you are on version 0.14, you can simply pass a tuple to .loc as below:

df.loc[('at', [1,3,4]), 'Dwell'] 
like image 151
chrisb Avatar answered Oct 06 '22 00:10

chrisb