如何为DataFrame创建Total行索引并计算各列求和?
给DataFrame添加总计行的解决方法
问题场景
现有如下结构的DataFrame:
com1 com2 com3 party1 10 0 0 party2 0 20 10 party3 0 0 25
需要新增名为Total的行,计算每列的总和,最终效果如下:
com1 com2 com3 party1 10 0 0 party2 0 20 10 party3 0 0 25 Total 10 20 35
尝试使用apply函数时因Total行不存在报错,错误代码:
df_pivot = df_pivot.apply(lambda col: df_pivot.loc['Total', col].sum())
解决方案
方法一:直接赋值(修改原DataFrame)
通过loc直接给新行赋值列总和,这是最简洁的方式:
df_pivot.loc['Total'] = df_pivot.sum(axis=0)
sum(axis=0)表示按列计算总和,将结果直接赋值给Total行即可。
方法二:拼接新行(不修改原DataFrame)
如果需要保留原数据,可先创建总计行的DataFrame,再与原数据拼接:
import pandas as pd # 生成总计行的DataFrame total_row = pd.DataFrame(df_pivot.sum(axis=0)).T total_row.index = ['Total'] # 拼接原数据和总计行 df_with_total = pd.concat([df_pivot, total_row])
错误原因说明
之前的代码逻辑颠倒:apply是对现有列/行执行计算,但你试图访问不存在的Total行来求和,自然会触发索引不存在的错误。正确逻辑是先计算现有列的总和,再将结果作为新行添加。
内容的提问来源于stack exchange,提问作者iBeMeltin
相关产品推荐
相关产品推荐

