如何选择不同级别的多个列?
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
下面的数据框是一个具有分层列 (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