如何选择不同级别的多个列?

How can multiple columns from different levels be selected?

下面的数据框是一个具有分层列 (df) 的多索引数据框:

                   EMG                                     Biofeedback    
Time     ID  
                   delta theta alpha beta high beta gamma  HeartRateVariabilty GSR     
20170101 PD102       4     5     8    3         0     9                1        2 
20170102 PD102       5     7     8    4         6     5                2        3       

如何选择不同级别的多个列?例如,我如何获得显示所有 EMG 列 并且仅显示 Biofeedback 列[=19] 下的 GSR 列 的数据框=](如下)

                   EMG                                     Biofeedback    
Time     ID  
                   delta theta alpha beta high beta gamma   GSR     
20170101 PD102       4     5     8    3         0     9      2       
20170102 PD102       5     7     8    4         6     5      3  

这里有几种方法可以access/subselect分层列

1. 使用一级的get_level_values 拒绝HeartRateVariabilty

In [764]: df.loc[:, df.columns.get_level_values(1) != 'HeartRateVariabilty']
Out[764]:
                 EMG                                  Biofeedback
               delta theta alpha beta high beta gamma         GSR
Time     ID
20170101 PD102     4     5     8    3         0     9           2
20170102 PD102     5     7     8    4         6     5           3

2. 或者,在第一层使用 select 并拒绝 HeartRateVariabilty

In [765]: df.select(lambda x: x[1] != 'HeartRateVariabilty', axis=1)
Out[765]:
                 EMG                                  Biofeedback
               delta theta alpha beta high beta gamma         GSR
Time     ID
20170101 PD102     4     5     8    3         0     9           2
20170102 PD102     5     7     8    4         6     5           3

3. 或者,在第一级使用 drop 并拒绝 HeartRateVariabilty

In [766]: df.drop('HeartRateVariabilty', axis=1, level=1)
Out[766]:
                 EMG                                  Biofeedback
               delta theta alpha beta high beta gamma         GSR
Time     ID
20170101 PD102     4     5     8    3         0     9           2
20170102 PD102     5     7     8    4         6     5           3

4. 或者,select 列的子列表-对元组与 .loc

In [777]: cols = [('EMG', 'delta'), ('EMG', 'theta'), ('EMG', 'alpha'), ('EMG', 'beta'),
                  ('EMG', 'high beta'), ('EMG', 'gamma'), ('Biofeedback', 'GSR')]
In [778]: df.loc[:, cols]
Out[778]:
                 EMG                                  Biofeedback
               delta theta alpha beta high beta gamma         GSR
Time     ID
20170101 PD102     4     5     8    3         0     9           2
20170102 PD102     5     7     8    4         6     5           3