2016-11-10 26 views
0

我正在阅读excel文件并将内容操作为pandas df。在multiindex df中重命名列标签(由excel构建)

继承人什么是excel内容看起来像(图1)。这里是我想要的df看起来像(图2),但有一个例外 - 我想重命名索引级别为0,“A4 +”到“所有Ind”和“A18-49”的列标签为“Comm Demo” 。

我遇到的问题是,当我重命名列标签他们倒过来,不知道为什么?

这里是我使用的代码..

full_path_to_excel_file = path_runs+excel_file_name+'.xls' 

    df = pd.read_excel(full_path_to_excel_file, 0, header=None, index_col=0) 
    df = df.iloc[11:,:] 
    df = df.fillna(method='ffill', axis=1) 

    df.columns=pd.MultiIndex.from_arrays(df[:2].values) 

    #Just name of index 
    df.index.name=None 

    #remove 3 rows which are already used as column names 
    df = df[pd.notnull(df.index)] 
    df = df.drop(['Channel Group ...']) 
    df.columns = df.columns.droplevel() 
    df.columns.set_levels(['All Ind', 'Comm Demo'], 0, inplace=True) 

我用Excel的是在这里:https://www.dropbox.com/s/vvpz8p7kzpcph6q/Time%20KPI%20000s%20BG.xls?dl=0

FIG1

enter image description here

图2

enter image description here

回答

1

使用set_levels
考虑df

df = pd.DataFrame(np.arange(8).reshape(-1, 4), 
        columns=pd.MultiIndex.from_product([['A4+', 'A18-49'], list('XY')])) 
df 

enter image description here


m = {'A4+': 'All Ind', 'A18-49': 'Comm Demo'} 
df.columns.set_levels(df.columns.levels[0].to_series().map(m), level=0, inplace=True) 
df 

enter image description here