【问题标题】: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?如何将具有多索引列的熊猫数据框导出到 Excel,其中一个级别的列名未合并,另一级别的列名合并?
【发布时间】:2021-11-12 07:42:53
【问题描述】:

我有一个熊猫数据框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 dataframe里面还有一些数据。

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

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

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

注意: 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}}

【问题讨论】:

    标签: python excel pandas dataframe export-to-excel


    【解决方案1】:

    一个技巧是单独写入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()
    

    【讨论】:

    • 我还要在最后添加 writer.save()。这完成了工作!谢谢!
    • @hbshrestha - 我忘了复制,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2021-09-02
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多