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

标签 python pandas select multiple-columns hierarchical-data

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

关于python - 如何选择不同级别的多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45653011/

相关文章:

python - 奇怪的python请求消息大小

python - featuretools历史标签计数

MySQL返回逆数?搜索结果或不包含的结果

MySQL 尝试从临时表中存储的值更新表

python - 查找没有有限值的 Pandas 数据框的行索引

python - 如何将带有多个字符的定界符的 .text 解析为 pandas df?

python - 如何在存在联合条件和两个单独条件的 sframe 中提取行?

python - 如何提取数据集中一分钟的每个数据点?

javascript - 当它有一个特定的类时,项目不会追加

python - 如果列表 B 中的每个项目不返回空列表,则从列表 A 中删除每个项目,即使 A == B