如何用Python熊猫在特定的一级选择多个列名(How to select multiple column names in specific one level with Python pandas)

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

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

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

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

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


我显示更具体的代码。

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

There is a DataFrame which has a MultipleIndex as column. I know I can use .xs() like a following code, when I want to select only one column name and level name.

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

In my specific case, I want to select multiple column names like following code. (Actually It doesn't work, because .xs doesn't support this way.)

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

How to select multiple column names in specific one level?


I show more specific code.

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 is this

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

and, I want to make this data by column name

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

最满意答案

你可以尝试select :

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

或者使用get_level_values :

print df.loc[:, df.columns.get_level_values('column_level1') .isin(['column_name1','column_name2'])] column_level1 column_name1 column_name2 column_level2 column_nameA column_nameB 0 0.1 1 1 0.2 2 2 0.3 3

You can try select:

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

Or get_level_values with isin:

print df.loc[:, df.columns.get_level_values('column_level1') .isin(['column_name1','column_name2'])] column_level1 column_name1 column_name2 column_level2 column_nameA column_nameB 0 0.1 1 1 0.2 2 2 0.3 3

更多推荐