如何将具有多索引列的 pandas 数据框导出到 Excel,其中一个级别的列名未合并,另一级别的列名已合并?

How to export pandas dataframe with Multi-index columns to Excel with column name in one level unmerged and column name in another level merged?

我有一个 pandas 数据框 df 如下所示:

Germany
Population  GDP GDP GDP CO2
2015    2020    2015    2020    2010    2020    2030
0   26572   28985   25367   32194   44835   14415   45785
1   12372   41730   35112   37214   40748   16088   46963
2   26480   46811   37487   30372   48703   37997   43135

这些列是由 3 个级别组成的多索引。第一级以德国为国家。第二层有一些指标,第三层有年。 pandas 数据框中有一些数据。

我想将此数据框导出到 Excel,以便在每一列中显示德国。然后我想在第二层合并人口、GDP 和二氧化碳。它应该如下所示:

当我使用 df.to_excel(file, merge_cells = True) 时,我得到如下所示的结果: 但我不想合并德国的列,并希望将其拆分,如上的屏幕截图所示最佳。使用 merge_cells = False 作为参数也不起作用,因为不同级别的列名将连接为一行中的列名。

相应地导出它的合适方法是什么? (如果可以的话,导出文件中year和values之间的空行也可以去掉吗?)

注意: df.to_dict() 看起来像这样:

{('Germany', 'Population', 2015): {0: 26572, 1: 12372, 2: 26480},
 ('Germany', 'Population', 2020): {0: 28985, 1: 41730, 2: 46811},
 ('Germany', 'GDP', 2015): {0: 25367, 1: 35112, 2: 37487},
 ('Germany', 'GDP', 2020): {0: 32194, 1: 37214, 2: 30372},
 ('Germany', 'GDP', 2010): {0: 44835, 1: 40748, 2: 48703},
 ('Germany', 'CO2', 2020): {0: 14415, 1: 16088, 2: 37997},
 ('Germany', 'CO2', 2030): {0: 45785, 1: 46963, 2: 43135}}

一个技巧是分别写入 MultiIndex 的第一级,然后跳过第一行写入另一个值 - 没有第一级的 DataFrame:

writer = pd.ExcelWriter('data.xlsx')

df1 = pd.DataFrame(columns=df.droplevel([1,2], axis=1).columns)
df2 = df.droplevel(0, axis=1)

df1.to_excel(writer, sheet_name='Sheet1')
df2.to_excel(writer, sheet_name='Sheet1', merge_cells = True, startrow=1)

writer.close()