pandas中groupby().sum()用于分组求和,包括单列分组、指定列求和、多列分组、缺失值处理及agg()灵活聚合五种方法。

如果您在使用 pandas 进行数据分析时,需要按某一列或几列对数据进行分组并计算每组的数值总和,则 groupby().sum() 是最常用的操作之一。以下是实现分组求和的多种方法:
一、基础单列分组求和
该方法适用于按单一分类列(如“部门”“地区”)分组,对所有数值列自动求和。pandas 会默认对所有可计算数值类型的列执行 sum 操作。
1、导入 pandas 库:import pandas as pd
2、创建示例 DataFrame:df = pd.DataFrame({'部门': ['A', 'B', 'A', 'B'], '销售额': [100, 200, 150, 300], '成本': [40, 80, 60, 120]})
3、执行分组求和:result = df.groupby('部门').sum()
二、指定列求和(避免非目标列参与计算)
当 DataFrame 中存在非数值列(如字符串、时间戳)或仅需对特定数值列汇总时,直接调用 .sum() 可能报错或产生意外结果,此时应显式选择目标列再聚合。
1、仅对“销售额”列分组求和:df.groupby('部门')['销售额'].sum()
2、对多个指定列求和:df.groupby('部门')[['销售额', '成本']].sum()
3、重置索引以获得普通列格式:df.groupby('部门')[['销售额', '成本']].sum().reset_index()
三、多列分组后求和
当需按两个或以上维度交叉分组(如“部门+季度”),groupby 可接收列表参数,生成复合索引结果,便于观察多维汇总关系。
1、构造含多维分类的数据:df = pd.DataFrame({'部门': ['A', 'A', 'B', 'B'], '季度': ['Q1', 'Q2', 'Q1', 'Q2'], '销售额': [100, 120, 200, 180]})
2、执行双列分组求和:df.groupby(['部门', '季度']).sum()
3、若需展平为扁平列结构,添加 as_index=False 参数:df.groupby(['部门', '季度'], as_index=False).sum()
四、处理缺失值后的分组求和
默认情况下,pandas 的 sum() 会自动跳过 NaN 值;但若某组全部为 NaN,则该组结果仍为 NaN。可通过 fillna() 预处理或 agg() 自定义逻辑控制行为。
1、查看含空值的原始数据:df = pd.DataFrame({'部门': ['A', 'A', 'B'], '销售额': [100, None, 200]})
2、直接分组求和(自动忽略 NaN):df.groupby('部门')['销售额'].sum()
3、将 NaN 替换为 0 后再求和:df.fillna({'销售额': 0}).groupby('部门')['销售额'].sum()
五、使用 agg() 实现灵活求和与命名
agg() 方法支持对不同列应用不同聚合函数,并可自定义输出列名,适合复杂汇总场景,例如同时保留计数与求和,或为结果列指定新名称。
1、对“销售额”求和并重命名结果列:df.groupby('部门').agg(总销售额=('销售额', 'sum'))
2、对多列分别指定聚合方式:df.groupby('部门').agg(总销售额=('销售额', 'sum'), 订单数=('销售额', 'count'))
3、混合使用内置函数与 lambda 表达式(如求和后乘以系数):df.groupby('部门').agg(加权销售额=('销售额', lambda x: x.sum() * 1.1))










