wfh wfh - 5 months ago 59
Python Question

pandas dataframe select columns in multiindex

I have the following pd.DataFrame:

Name 0 1 ...
Col A B A B ...
0 0.409511 -0.537108 -0.355529 0.212134 ...
1 -0.332276 -1.087013 0.083684 0.529002 ...
2 1.138159 -0.327212 0.570834 2.337718 ...


It has MultiIndex columns with names=['Name', 'Col'] and hierarchical levels. The 'Name' label goes from 0 to n, and for each label, there are two 'A' and 'B' columns.

I would like to subselect all the 'A' (or 'B') columns of this DataFrame. Is this possible in an elegant way?

Thanks!

Answer

There is a get_level_values method that you can use in conjunction with boolean indexing to get the the intended result.

In [13]:

df = pd.DataFrame(np.random.random((4,4)))
df.columns = pd.MultiIndex.from_product([[1,2],['A','B']])
print df
          1                   2          
          A         B         A         B
0  0.543980  0.628078  0.756941  0.698824
1  0.633005  0.089604  0.198510  0.783556
2  0.662391  0.541182  0.544060  0.059381
3  0.841242  0.634603  0.815334  0.848120
In [14]:

print df.iloc[:, df.columns.get_level_values(1)=='A']
          1         2
          A         A
0  0.543980  0.756941
1  0.633005  0.198510
2  0.662391  0.544060
3  0.841242  0.815334
Comments