
本文介绍如何在 pandas dataframe 中快速添加一个名为 "total" 的新行,使其包含每列数值的总和,并避免因索引不存在导致的 keyerror。方法简洁高效,仅需一行代码即可完成。
本文介绍如何在 pandas dataframe 中快速添加一个名为 "total" 的新行,使其包含每列数值的总和,并避免因索引不存在导致的 keyerror。方法简洁高效,仅需一行代码即可完成。
在数据分析中,常需为表格添加汇总行(如“总计”“合计”),以直观呈现各列的统计结果。Pandas 提供了非常简洁的方式实现这一目标:直接通过 .loc 赋值新增一行,配合 .sum() 方法自动沿默认轴(axis=0,即按列求和)计算各列总和。
假设原始 DataFrame 如下:
import pandas as pd
df = pd.DataFrame({
'com1': [10, 0, 0],
'com2': [0, 20, 0],
'com3': [0, 10, 25]
}, index=['party1', 'party2', 'party3'])
执行以下代码即可添加汇总行:
df.loc["Total"] = df.sum()
✅ 输出效果:
com1 com2 com3 party1 10 0 0 party2 0 20 10 party3 0 0 25 Total 10 20 35
⚠️ 注意事项:
- df.sum() 默认对数值列求和,会自动跳过非数值列(如字符串、空值等);若需强制包含所有列,请先确保数据类型兼容,或使用 df.sum(numeric_only=True) 显式控制。
- 若原 DataFrame 索引为 RangeIndex(如 0, 1, 2),df.loc["Total"] 仍可安全添加——Pandas 会自动将索引转换为 object 类型以容纳字符串标签,无需预先设置。
- 错误写法示例(如问题中提到的):df.loc['Total', col].sum() 是无效的,因为 'Total' 行尚不存在,且语法混淆了列选择与聚合逻辑;正确做法是先赋值再访问,或使用 pd.concat([df, df.sum().to_frame('Total').T]) 作为替代方案(适用于不可变索引场景)。
总结:df.loc["Total"] = df.sum() 是最直接、可读性最强、性能最优的解决方案,适用于绝大多数常规汇总需求。











