为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 MultiIndex 将“总计”行附加到熊猫数据框

如何使用 MultiIndex 将“总计”行附加到熊猫数据框

万千封印 2023-02-07 13:44:26
假设您有一个带有 MultiIndex 的简单 pandas 数据框:df = pd.DataFrame(1, index=pd.MultiIndex.from_tuples([('one', 'elem1'), ('one', 'elem2'), ('two', 'elem1'), ('two', 'elem2')]),                  columns=['col1', 'col2'])打印成表格:           col1  col2one elem1     1     1    elem2     1     1two elem1     1     1    elem2     1     1问题:如何向该 Dataframe 添加“总计”行?预期输出:             col1  col2one   elem1   1.0   1.0      elem2   1.0   1.0two   elem1   1.0   1.0      elem2   1.0   1.0Total         4.0   4.0第一次尝试:天真的实现如果我只是忽略 MultiIndex 并遵循标准方式df.loc['Total'] = df.sum()输出:              col1  col2(one, elem1)     1     1(one, elem2)     1     1(two, elem1)     1     1(two, elem2)     1     1Total            4     4好像是对的,但是MultiIndex被改成了Index([('one', 'elem1'), ('one', 'elem2'), ('two', 'elem1'), ('two', 'elem2'), 'Total'], dtype='object')第二次尝试:明确df.loc['Total', :] = df.sum()或者(感到沮丧并出于恶意改变轴)df.loc['Total', :] = df.sum(axis=1)输出(两次调用相同):             col1  col2one   elem1   1.0   1.0      elem2   1.0   1.0two   elem1   1.0   1.0      elem2   1.0   1.0Total         NaN   NaNMultiIndex 未转换,但 Total 错误(NaN != 4)。
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

解决方案

您必须删除索引df.sum()并仅使用这些值:


df.loc['Total', :] = df.sum().values

输出:


             col1  col2

one   elem1   1.0   1.0

      elem2   1.0   1.0

two   elem1   1.0   1.0

      elem2   1.0   1.0

Total         4.0   4.0

为什么第二次尝试错了?

第二次尝试几乎是正确的。但是 df.sum() 有Index(['col1', 'col2'], dtype='object'). 因此,pandas 无法匹配索引。新索引 ('Total', '') 已附加但没有值。


但是为什么df.loc['Total', :] = df.sum(axis=1)也失败了呢?它具有正确的多索引。Pandas 完全按照您所说的去做,即对列求和。因此,df.sum(axis=1)为您提供以下数据框:


one  elem1    2

     elem2    2

two  elem1    2

     elem2    2

df该数据框在任何意义上都无法与原始数据框匹配。


查看完整回答
反对 回复 2023-02-07
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号