具有多索引的 pd.DataFrame 的摘要行

Summary Row for a pd.DataFrame with multiindex

我有一个使用 pandas 创建的 multiIndex 数据框,与此类似:

nest = {'A1': dfx[['aa','bb','cc']],
        'B1':dfx[['dd']],
        'C1':dfx[['ee', 'ff']]}

reform = {(outerKey, innerKey): values for outerKey, innerDict in nest.items() for innerKey, values in innerDict.items()}

dfzx = pd.DataFrame(reform)

我想要实现的是在数据框的末尾添加一个新行,其中包含新索引代表的三个类别的总计摘要 ( A1, B1, C1).

我已经尝试使用 df.loc(在这种情况下我通常会使用的),但出现错误。同样适用于 iloc.

a1sum = dfzx['A1'].sum().to_list()
a1sum = sum(a1sum)

b1sum = dfzx['B1'].sum().to_list()
b1sum = sum(b1sum)

c1sum = dfzx['C1'].sum().to_list()
c1sum = sum(c1sum)

totalcat = a1sum, b1sum, c1sum

newrow = ['Total', totalcat]
newrow

dfzx.loc[len(dfzx)] = newrow

ValueError: cannot set a row with mismatched columns

#Alternatively
newrow2 = ['Total', a1sum, b1sum, c1sum]
newrow2

dfzx.loc[len(dfzx)] = newrow2

ValueError: cannot set a row with mismatched columns

我该如何修正这个错误?或者还有其他功能可以让我继续吗?

注意:DF注定要移动到一个Excel文件上(我用的是ExcelWriter)

我最终想要达到的结果类型是这一种(灰色行“SUM”

我自己想出了一种解决方案。

  1. 我在 Pandas 中创建了一个包含摘要的单独 DataFrame。

  2. 我使用 ExcelWriter 将两个数据框放在同一个 excel 工作表上。

从技术上讲,可以在 Excel 中设置样式和格式数据(xlsxwriter 或 framestyle 似乎是流行的模块)。或者应该手动执行此操作。