如何拆分Pandas中的列标题并正确导出到Excel

我在pandas有以下数据标题:

在这里输入图像说明

我正在努力得到以下结果:

在这里输入图像说明

我试图执行一个命令:

df = df.reorder_levels([0, 1, 3, 2], axis='columns') 

然而,这只是对行进行重新sorting,而我在这里看到的风险是破坏数据的一致性。

你可以build议pandas/ pythonic的方式来做到这一点? 或者我应该检查哪些选项以正确导出到Excel(如图2)?

我最近遇到这个问题,发现另一个肮脏,但更容易黑客。

只要第一个标题行具有不同的值,df.to_excel将把后续的标题行保存为单独的值。 所以当设置你的头文件时,把第一行做成唯一的字符,并在代码的其余部分忽略它。

没有唯一的第一个标题行:

 df1 = pd.DataFrame(columns=[['APPROACH #1', 'APPROACH #1', 'APPROACH #1', 'APPROACH #1', 'APPROACH #1'], ['CODE', 'CODE', 'CODE', 'CODE', 'CODE'], ['GLMNET', 'HYBER', 'LightGBM', 'XGB_1', 'XGB_2']]) 

df1结果与合并标题值的图像

独特的第一个标题行:

 df2 = pd.DataFrame(columns=[[1, 2, 3, 4, 5], ['APPROACH #1', 'APPROACH #1', 'APPROACH #1', 'APPROACH #1', 'APPROACH #1'], ['CODE', 'CODE', 'CODE', 'CODE', 'CODE'], ['GLMNET', 'HYBER', 'LightGBM', 'XGB_1', 'XGB_2']]) 

df2结果带有单独标题值的图像

希望这可以帮助!

我认为你可以只使用一些破解解决scheme – 从MultiIndex列中创build助手df ,然后写入excel而无需标题:

 np.random.seed(100) cols = pd.MultiIndex.from_product([list('ABC'), list('EF')]) df = pd.DataFrame(np.random.random((1,6)), columns=cols) print (df) ABCEFEFEF 0 0.543405 0.278369 0.424518 0.844776 0.004719 0.121569 df1 = pd.DataFrame(df.columns.values.tolist()).T df1.columns.name = None df1.index = [''] * len(df1.index) print (df1) 0 1 2 3 4 5 AABBCC EFEFEF df.columns = np.arange(len(df.columns)) df = pd.concat([df1, df]) print (df) 0 1 2 3 4 5 AABBCC EFEFEF 0 0.543405 0.278369 0.424518 0.844776 0.00471886 0.121569 df.to_excel('myfile.xlsx', header=None) 

另一个双转置解决scheme:

 df1 = df.T.rename_axis(['',' ']).reset_index().T print (df1) 0 1 2 3 4 5 AABBCC EFEFEF 0 0.543405 0.278369 0.424518 0.844776 0.00471886 0.121569 df.to_excel('myfile.xlsx', header=None)