重命名多索引 df 中的列标签(从 excel 构建)
renaming column labels in multiindex df (built from excel)
我正在读取 excel 文件并将内容处理为 pandas df。
这是 excel 内容的样子(图 1)。这就是我希望 df 看起来像的样子(图 2),但有一个例外——我想将索引级别 0 的列标签重命名,"A4+" 到 "All 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
图 1
图 2
使用set_levels
考虑 df
df = pd.DataFrame(np.arange(8).reshape(-1, 4),
columns=pd.MultiIndex.from_product([['A4+', 'A18-49'], list('XY')]))
df
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
我正在读取 excel 文件并将内容处理为 pandas df。
这是 excel 内容的样子(图 1)。这就是我希望 df 看起来像的样子(图 2),但有一个例外——我想将索引级别 0 的列标签重命名,"A4+" 到 "All 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
图 1
图 2
使用set_levels
考虑 df
df = pd.DataFrame(np.arange(8).reshape(-1, 4),
columns=pd.MultiIndex.from_product([['A4+', 'A18-49'], list('XY')]))
df
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