【问题标题】:Summary Row for a pd.DataFrame with multiindex具有多索引的 pd.DataFrame 的摘要行
【发布时间】:2021-07-21 13:47:24
【问题描述】:

我有一个用类似于这个的熊猫创建的 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”)

【问题讨论】:

    标签: python excel rows multi-index pandas.excelwriter


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 2020-08-18
      • 2014-11-03
      • 2013-02-07
      • 2016-10-07
      • 2019-10-12
      • 1970-01-01
      相关资源
      最近更新 更多