如何使用Python pandas在特定的一个级别选择多个列名

2024-09-27 21:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个DataFrame具有MultipleIndex作为列。 当我只想选择一个列名和级别名时,我知道可以像下面的代码一样使用.xs()。在

df.xs('column_name1', level='column_level1', axis=1)

在我的具体例子中,我想选择多个列名,如下面的代码。 (实际上它不起作用,因为.xs不支持这种方式。)

^{pr2}$

如何在特定的一个级别选择多个列名?在


我展示了更具体的代码。在

import pandas as pd
import io

data = u"""
column_name1,column_name2,column_name3
column_nameA,column_nameB,column_nameC
0.1,1,10
0.2,2,20
0.3,3,30
"""
df = pd.read_csv(io.StringIO(data), header=[0, 1])
df.columns.names = ['column_level1', 'column_level2']
print df

df这是吗

column_level1 column_name1 column_name2 column_name3
column_level2 column_nameA column_nameB column_nameC
0                      0.1            1           10
1                      0.2            2           20
2                      0.3            3           30

我想用列名来生成这个数据

column_level1 column_name1 column_name2
column_level2 column_nameA column_nameB
0                      0.1            1
1                      0.2            2
2                      0.3            3

Tags: 代码ioimportdfdatacolumn级别pd
2条回答

IIUC您可以将locslicedocs一起使用:

In [58]: df
Out[58]:
first        bar                 baz                 foo                 qux  
second       one       two       one       two       one       two       one  two
0      -0.313815 -0.160567 -0.028432 -1.169930  1.043274  0.353722 -0.912303 -1.041827
1      -0.317570 -0.452766  0.950578  0.467092 -1.960936  1.700110  0.003934  0.989709
2       0.091249  2.406773  1.848771 -1.275288  0.740245  0.657444 -1.157392 -0.103663

In [59]: df.loc[:, (['bar', 'baz'], slice(None))]
Out[59]:
first        bar                 baz
second       one       two       one       two
0      -0.313815 -0.160567 -0.028432 -1.169930
1      -0.317570 -0.452766  0.950578  0.467092
2       0.091249  2.406773  1.848771 -1.275288

对于第二级:

^{pr2}$

编辑

对于您的数据帧:

In [75]: df.loc[:, (slice(None), ['column_nameA', 'column_nameB'])]
Out[75]:
column_level1 column_name1 column_name2
column_level2 column_nameA column_nameB
0                      0.1            1
1                      0.2            2
2                      0.3            3

In [77]: df.loc[:, (['column_name1', 'column_name2'], slice(None))]
Out[77]:
column_level1 column_name1 column_name2
column_level2 column_nameA column_nameB
0                      0.1            1
1                      0.2            2
2                      0.3            3

您可以尝试^{}

print df.select(lambda x: x[0] in ['column_name1','column_name2'], axis=1)

column_level1 column_name1 column_name2
column_level2 column_nameA column_nameB
0                      0.1            1
1                      0.2            2
2                      0.3            3

^{}和{a3}:

^{pr2}$

相关问题 更多 >

    热门问题