如何选择不同层次的多列?

问题描述:

下面的数据帧是多索引数据帧具有分级柱(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列,只有生物反馈栏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
+0

您是否有生成此数据框的代码? –

这里有几个方法来访问/子选择分层列

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.或者,子选列列表 - 与元组对.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 
+0

谢谢!解决方案4对我来说效果最好,因为我需要Biofeedback(即GSR)和另一个(不包括示例!)下的多个列。只是为了我的信息,是否可以使用解决方案1,2,3来丢弃或拒绝多个列? – offthehook

+0

是的,作为一个列表,并且在需要的地方有'x不在[..]的条件。 – Zero