假设您有一个带有 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该数据框在任何意义上都无法与原始数据框匹配。
添加回答
举报
0/150
提交
取消
