
本文介绍如何为 pandas dataframe 快速添加一行名为 "total" 的汇总行,自动计算每列数值总和,并保持原有索引结构。方法简洁高效,适用于报表生成、数据汇总等常见分析场景。
本文介绍如何为 pandas dataframe 快速添加一行名为 "total" 的汇总行,自动计算每列数值总和,并保持原有索引结构。方法简洁高效,适用于报表生成、数据汇总等常见分析场景。
在数据分析中,经常需要在表格末尾添加一行“总计”(Total),用于直观展示各列的合计值。Pandas 提供了非常简洁的方式实现这一需求,无需复杂循环或 apply 函数——关键在于直接利用 .sum() 方法配合标签赋值。
假设你有如下 DataFrame:
import pandas as pd
df = pd.DataFrame({
'com1': [10, 0, 0],
'com2': [0, 20, 0],
'com3': [0, 10, 25]
}, index=['party1', 'party2', 'party3'])输出为:
com1 com2 com3 party1 10 0 0 party2 0 20 10 party3 0 0 25
✅ 正确做法是直接使用 .loc 赋值新行:
df.loc['Total'] = df.sum() print(df)
结果即为所求:
com1 com2 com3 party1 10 0 0 party2 0 20 10 party3 0 0 25 Total 10 20 35
⚠️ 注意事项:
- df.sum() 默认沿 axis=0(即对每列求和),返回一个与列同名的 Series,可直接赋值给新行;
- 确保所有参与求和的列为数值类型(如 int64/float64),否则会跳过非数值列或报错;若含非数值列,可先用 select_dtypes(include='number') 过滤;
- 原问题中错误写法 df_pivot.apply(lambda col: df_pivot.loc['Total', col].sum()) 存在双重问题:一是 'Total' 行尚不存在,导致 KeyError;二是逻辑混淆了列名与索引访问方式。
? 进阶提示:若需将 “Total” 行固定置于底部(例如排序后仍保持在末尾),可后续重置索引再设置:
df = df.reset_index().assign(index=df.index.tolist() + ['Total']).set_index('index')
# 更推荐:使用 concat(更显式、更安全)
total_row = pd.DataFrame([df.sum()], index=['Total'])
df_with_total = pd.concat([df, total_row])但对大多数场景,df.loc['Total'] = df.sum() 已足够简洁、可靠且高效。

















