如何将具有多索引列的 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()
我有一个 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()