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
相关产品推荐
相关产品推荐

