在同一个 excel sheet 中将多个 Pandas 数据帧相互叠加

append several Pandas dataframe on top of each other in the same excel sheet

我有两个带标签的数据框,我想在彼此的底部附加或连接它们

d = {}
d['first_level'] = pd.DataFrame(columns=['idx', 'a', 'b', 'c'],
                                 data=[[10, 1, 2, 3],
                                       [20, 4, 5, 6]]).set_index('idx')

d['first_level2'] = pd.DataFrame(columns=['idx', 'a', 'b', 'c'],
                                 data=[[10, 1, 2, 3],
                                       [20, 4, 5, 6]]).set_index('idx')

    df_final = pd.concat(d, axis=1,)
    writer = pd.ExcelWriter('test_file.xlsx')
            # df_final.reset_index(drop=True, inplace=True)
            # ddf_finalf=df_final.drop(['idx'],axis=1)
            df_final.to_excel(writer, sheet_name='my_analysis', index=True,)
        
        writer.save()

我有这段代码,这导致 excel 输出如下:

 first_level  first_level2 
 idx a b c     idx a b c
  10 1 2 3      10 1 2 3
  20 4 5 5      20 4 5 5

但是我想要 first_level2first_level 的底部,excel 输出应该是这样的:

first_level  
idx a b c 
10 1 2 3 
20 4 5 6 

first_level2 
idx a b c
10 1 2 3
20 4 5 5

我也尝试使用 MultiIndex,但得到了相同的结果,如何使用 pandas 实现此目的我想在 excel 中获得这样的输出,我尝试查看文档但找不到任何相关的东西。

如 Epsi95 所回答,轴应为 0

import pandas as pd
d = {}
d['first_level'] = pd.DataFrame(columns=['idx', 'a', 'b', 'c'],
                                 data=[[10, 1, 2, 3],
                                       [20, 4, 5, 6]]).set_index('idx')

d['first_level2'] = pd.DataFrame(columns=['idx', 'a', 'b', 'c'],
                                 data=[[10, 1, 2, 3],
                                       [20, 4, 5, 6]]).set_index('idx')
df_final = pd.concat(d, axis=0,)
writer = pd.ExcelWriter('test_file.xlsx')
        # df_final.reset_index(drop=True, inplace=True)
        # ddf_finalf=df_final.drop(['idx'],axis=1)
df_final.to_excel(writer, sheet_name='my_analysis', index=True,)
    
writer.save()

如果您想将带有自定义 header 的每个数据帧附加到 excel sheet 中,您可以使用循环在 [=14= 的帮助下连续添加每个数据帧]:

writer = pd.ExcelWriter('file.xlsx')
start = 0
for k, df in d.items():
    df2 = pd.concat({k: df}, axis=1)
    df2.to_excel(writer, sheet_name='test', startrow=start)
    start += len(df)+df.columns.nlevels+int(bool(df.index.name))+1
writer.save()

输出: