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

off*_*ook 1 python select multiple-columns hierarchical-data pandas

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

                   肌电图生物反馈    
时间ID  
                   δtheta alpha beta高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列下仅GSR列的数据(如下所示)

                   肌电图生物反馈    
时间ID  
                   δtheta alpha beta高beta gamma GSR     
20170101 PD102 4 5 8 3 0 9 2       
20170102 PD102 5 7 8 4 6 5 3  

Zer*_*ero 5

这是访问/子选择层次列的几种方法

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

4.或者,用以下命令对列对元组列表进行子选择.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
Run Code Online (Sandbox Code Playgroud)