有一个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 dfdf就是这个
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 3There 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 dfdf 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 30and, 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 3You 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 3Or 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更多推荐
发布评论