Skip to main content
 首页 » 编程设计

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

2025年05月04日22qlqwjy

下面的数据框是一个具有分层列 (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 列 下的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  

请您参考如下方法:

这里有几种访问/子选择分层列的方法

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