当前位置:首页>python>Python数据分析:groupby分组函数

Python数据分析:groupby分组函数

  • 2026-09-06 14:51:05
Python数据分析:groupby分组函数

📊 Python数据分析利器:深入掌握 Pandas 的 groupby 函数

在进行数据分析时,我们经常需要对数据按照某些特征进行分组,然后对每组数据进行统计、聚合或转换。Pandas 中的 groupby 函数正是为此而生,它是数据分析中最常用、最强大的工具之一。

今天,我们就来系统梳理 groupby 的常见用法,从基础到进阶,助你轻松玩转分组分析!


1️⃣ 一列分组 + 一列聚合(最基础用法)

假设我们有一个销售数据表,包含「城市」和「销售额」两列:

import pandas as pddf = pd.DataFrame({'city': ['北京', '上海', '北京', '广州', '上海'],'sales': [100, 150, 200, 120, 180]})

我们想按城市汇总总销售额:

result = df.groupby('city')['sales'].sum()print(result)

输出:

city北京    300上海    330广州    120Name: sales, dtype: int64

✅ 要点:

  • groupby('city') 按城市分组
  • ['sales'] 选择要聚合的列
  • .sum() 是聚合函数(也可用 mean、max、count 等)

2️⃣ 一列分组 + 多列聚合

如果数据包含多列数值,比如「销售额」和「利润」:

df = pd.DataFrame({'city': ['北京', '上海', '北京', '广州', '上海'],'sales': [100, 150, 200, 120, 180],'profit': [20, 30, 40, 25, 35]})

我们可以对多个列同时聚合:

result = df.groupby('city')[['sales', 'profit']].sum()print(result)

输出:

      sales  profitcity              北京     300      60上海     330      65广州     120      25

💡 也可以使用 agg() 实现更灵活的聚合(见第4部分)。


3️⃣ 多列分组 + 多列聚合

当需要按多个维度分组时(如「城市」+「产品类别」):

df = pd.DataFrame({'city': ['北京', '北京', '上海', '上海', '北京'],'category': ['A', 'B', 'A', 'B', 'A'],'sales': [100, 150, 200, 120, 180],'profit': [20, 30, 40, 25, 35]})result = df.groupby(['city', 'category'])[['sales', 'profit']].sum()print(result)

输出(MultiIndex):

               sales  profitcity category              北京 A           280      55     B           150      30上海 A           200      40     B           120      25

📌 使用 reset_index() 可将分组键转为普通列:

result.reset_index(inplace=True)

4️⃣ groupby + agg:自定义聚合方式

agg() 允许对不同列应用不同的聚合函数,甚至多个函数!

result = df.groupby('city').agg({'sales': 'sum','profit': ['mean', 'max']})print(result)

输出:

      sales profit              sum   mean maxcity                  北京     330   32.5  35上海     320   32.5  40

✨ 还可以传入自定义函数或 lambda:

df.groupby('city').agg({'sales': lambda x: x.max() - x.min(),'profit': 'std'})

5️⃣ groupby + transform:保留原始结构的分组操作

与 agg 不同,transform 返回与原 DataFrame 相同形状的结果,常用于标准化、填充缺失值等场景。

例如:计算每个城市销售额占该城市总销售额的比例:

df['sales_ratio'] = df['sales'] / df.groupby('city')['sales'].transform('sum')print(df)

输出:

  city category  sales  profit  sales_ratio0   北京        A    100      20     0.3030301   北京        B    150      30     0.4545452   上海        A    200      40     0.6250003   上海        B    120      25     0.3750004   北京        A    180      35     0.545455

✅ transform 的关键优势:不改变原始行数,结果可直接作为新列加入原表。


🔚 小结

场景
代码示例
特点
单列分组单列聚合
df.groupby('A')['B'].sum()
最基础
单列分组多列聚合
df.groupby('A')[['B','C']].mean()
批量处理
多列分组多列聚合
df.groupby(['A','B'])[['C','D']].sum()
多维分析
自定义聚合
df.groupby('A').agg({'B':'sum', 'C':['mean','max']})
灵活强大
分组变换
df.groupby('A')['B'].transform('mean')
保持原结构

掌握这些 groupby 技巧,你的数据分析效率将大幅提升!赶紧在你的项目中试试吧~


📘 小贴士:

  • groupby 后默认会丢弃 NaN 分组(可通过 dropna=False 保留)
  • 使用 as_index=False 可避免分组列变成索引
  • 结合 apply() 可实现更复杂的自定义逻辑

如果你觉得这篇文章有帮助,欢迎点赞、转发,让更多人一起学好 Python 数据分析!🚀

最新文章

随机文章