以长格式保存具有不同级别名称的多索引列 Pandas 为 excel 格式

Posted

技术标签:

【中文标题】以长格式保存具有不同级别名称的多索引列 Pandas 为 excel 格式【英文标题】:Save as excel format a multi index column Pandas with diffrent level names in a long format 【发布时间】:2021-10-10 12:54:08 【问题描述】:

给定df 的列表,目标是以单页长格式保存所有df

每个df 都由 3 级列索引组成。对于每个df,第一级是唯一的(“theme1”和“theme2”)。然而,所有 'df` 的第二级 ('level2) 和第三级 (A,B,C) 都是相似的。

在下面的代码sn-p中,

import pandas as pd
df1 = pd.DataFrame('A': [11, 21, 31],
               'B': [12, 22, 32],
               'C': [13, 23, 33],
              index=['ONE', 'TWO', 'THREE'])

df2 = pd.DataFrame('A': [111, 211, 311],
               'B': [121, 221, 321],
               'C': [131, 231, 331],
              index=['ONE', 'TWO', 'THREE'])

df1.columns = pd.MultiIndex.from_product([['theme1'],['level2'],df1.columns ])

df2.columns = pd.MultiIndex.from_product([['theme2'],['level2'],df2.columns ])

list_df=[df1,df2]
df_all=pd.concat(list_df,axis=1)

df_all.to_excel('df_all1.xlsx')

生成单页宽格式

但是,我想知道如何制作如下所示的单页长格式

附言长格式允许轻松的 excel 垂直滚动

【问题讨论】:

【参考方案1】:

你可以这样做:

import pandas as pd

def multiple_dfs_to_same_excel_sheet(df_list, file_name, sheet_name, spaces):
    writer = pd.ExcelWriter(file_name,engine='xlsxwriter')   
    row = 0
    for dataframe in df_list:
        dataframe.to_excel(writer,sheet_name=sheet_name,startrow=row , startcol=0)   
        row = row + len(dataframe.index) + spaces + 1
    writer.save()


df1 = pd.DataFrame('A': [11, 21, 31],
               'B': [12, 22, 32],
               'C': [13, 23, 33],
              index=['ONE', 'TWO', 'THREE'])

df2 = pd.DataFrame('A': [111, 211, 311],
               'B': [121, 221, 321],
               'C': [131, 231, 331],
              index=['ONE', 'TWO', 'THREE'])

df1.columns = pd.MultiIndex.from_product([['theme1'],['level2'],df1.columns ])

df2.columns = pd.MultiIndex.from_product([['theme2'],['level2'],df2.columns ])

list_df=[df1,df2]

multiple_dfs_to_same_excel_sheet(list_df, 'excel_file.xlsx', 'sheet_01', 6)

我在开头添加了函数multiple_dfs_to_same_excel_sheet的定义,在结尾添加了它的调用。 这个函数来自@TomDobbs (Putting many python pandas dataframes to one excel worksheet)。

注意:我将空格数设置为 6,以便在表格之间有 3 行,如您的图像中所示。那是因为我们必须考虑第一行的数量(“Theme1”、“Level2”和“ABC”),所以这里是 3 个第一行(“Theme1”、“Level2”和“ABC”)加上 3 个空格.

【讨论】:

以上是关于以长格式保存具有不同级别名称的多索引列 Pandas 为 excel 格式的主要内容,如果未能解决你的问题,请参考以下文章

分配多索引列,同时保留索引级别值的顺序

Groupby 使用字典的多索引列

将 Pandas 数据帧与多索引列和不规则时间戳连接起来

如何将多索引列转换为熊猫数据框的单索引列?

具有多索引列的 Pandas groupby

枢轴熊猫数据框具有多索引列