selecting from multi-index pandas

silencer picture silencer · Sep 16, 2013 · Viewed 131.6k times · Source

I have a multi-index data frame with columns 'A' and 'B'.

Is there is a way to select rows by filtering on one column of the multi-index without resetting the index to a single column index?

For Example.

# has multi-index (A,B)
df
#can I do this? I know this doesn't work because the index is multi-index so I need to     specify a tuple

df.ix[df.A ==1]

Answer

Andy Hayden picture Andy Hayden · Sep 16, 2013

One way is to use the get_level_values Index method:

In [11]: df
Out[11]:
     0
A B
1 4  1
2 5  2
3 6  3

In [12]: df.iloc[df.index.get_level_values('A') == 1]
Out[12]:
     0
A B
1 4  1

In 0.13 you'll be able to use xs with drop_level argument:

df.xs(1, level='A', drop_level=False) # axis=1 if columns

Note: if this were column MultiIndex rather than index, you could use the same technique:

In [21]: df1 = df.T

In [22]: df1.iloc[:, df1.columns.get_level_values('A') == 1]
Out[22]:
A  1
B  4
0  1