You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何对指定列计算行总和并添加汇总行

解决DataFrame指定列求和并添加汇总行的问题

首先看你的原始数据构造代码:

import pandas as pd

# 初始化数据列表
data = [['Netherlands', 100, 200], ['Belgium', 15, 80], ['Germany', 125, 300]]
# 创建DataFrame
df = pd.DataFrame(data, columns=['Area', 'Year_2010', 'Year_2020'])

输出结果:

Area  Year_2010  Year_2020
0  Netherlands        100        200
1      Belgium         15         80
2      Germany        125        300

你遇到的问题是直接调用df.sum(axis=0)会把Area列的字符串拼接,导致汇总行的Area列变成拼接后的字符串,不符合需求。下面提供几种可行的解决方法:

方法1:指定列求和后构造汇总行(推荐)

只对需要的数值列计算总和,手动构造包含Total标识的汇总行,再用pd.concat拼接到原DataFrame末尾:

# 计算Year_2010和Year_2020列的总和
total_nums = df[['Year_2010', 'Year_2020']].sum(axis=0)
# 构造汇总行,Area列设为'Total'
total_row = pd.DataFrame({
    'Area': ['Total'],
    'Year_2010': [total_nums['Year_2010']],
    'Year_2020': [total_nums['Year_2020']]
})
# 拼接原数据和汇总行
df_total = pd.concat([df, total_row], ignore_index=True)
print(df_total)

输出结果:

Area  Year_2010  Year_2020
0  Netherlands        100        200
1      Belgium         15         80
2      Germany        125        300
3        Total        240        580

方法2:先求和再修改Area列值

如果习惯用sum后处理,可以先获取所有列的总和,再手动修改Area列的内容:

# 计算所有列的总和(此时Area列会被拼接)
total = df.sum(axis=0)
# 将Area列的值改为'Total'
total['Area'] = 'Total'
# 添加汇总行到原DataFrame
df_total = df.append(total, ignore_index=True)
print(df_total)

注意:append方法在pandas 2.0及以上版本已被标记为弃用,建议优先使用方法1的pd.concat。

方法3:用agg自定义聚合规则(适合复杂场景)

如果需要对不同列设置不同的聚合逻辑,可以用agg函数定义每列的处理方式:

# 定义各列的聚合规则:Area列设为'Total',数值列求和
agg_rules = {
    'Area': lambda x: 'Total',
    'Year_2010': 'sum',
    'Year_2020': 'sum'
}
# 生成汇总行
total_row = df.agg(agg_rules).to_frame().T
# 拼接数据
df_total = pd.concat([df, total_row], ignore_index=True)
print(df_total)

输出结果和方法1一致。

内容的提问来源于stack exchange,提问作者Foeke Boersma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:30:32