news 2026/3/27 1:30:36

Python数据分析:groupby分组函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python数据分析:groupby分组函数

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

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

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


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

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

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

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

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

输出:

city 北京 300 上海 330 广州 120 Name: 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 profit city 北京 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 profit city 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 max city 北京 330 32.5 35 上海 320 32.5 40

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

df.groupby('city').agg({'sales':lambdax: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_ratio 0 北京 A 100 20 0.303030 1 北京 B 150 30 0.454545 2 上海 A 200 40 0.625000 3 上海 B 120 25 0.375000 4 北京 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 数据分析!🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 11:21:26

Thinkphp和Laravel框架的教学日常管理系统(活动 选课 考勤,听课)

目录 核心功能模块ThinkPHP实现要点Laravel实现要点技术对比差异安全防护措施扩展性设计部署优化方案 开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 以下是关于使用ThinkPHP和Laravel框架开发教学日常管理系统(涵…

作者头像 李华
网站建设 2026/3/25 5:41:12

计算机毕业设计springboot辅导员职责信息管理系统 基于Spring Boot的高校辅导员工作事务综合平台 Spring Boot驱动的学生事务与辅导员协同管理系统

计算机毕业设计springboot辅导员职责信息管理系统_6g45l (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 高校日常育人工作中,辅导员需要同步跟踪学生的学业、考勤、…

作者头像 李华
网站建设 2026/3/25 23:12:59

全自动汽油氧化安定性测定仪的技术解析与应用价值研究

引言 汽油的氧化安定性是其储存与使用过程中的关键性能指标,直接关系到油品质量、发动机运行效率及环保表现。传统的手动测定方法依赖人工操作与经验判断,存在效率低、重复性差、人为误差大等问题。随着分析检测技术的进步,全自动汽油氧化安…

作者头像 李华
网站建设 2026/3/25 10:28:13

深度测评8个降AIGC网站,千笔·降AIGC助手解决论文AI率过高难题

AI降重工具,为论文保驾护航 在当前学术写作中,随着AI技术的广泛应用,论文中的AIGC率问题越来越受到重视。许多学生在使用AI辅助写作时,往往会出现内容过于机械化、缺乏原创性的问题,导致查重率居高不下,甚至…

作者头像 李华