在同一个 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_level2
在 first_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()
输出:
我有两个带标签的数据框,我想在彼此的底部附加或连接它们
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_level2
在 first_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()
输出: