news 2026/5/1 5:17:54

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/5/1 4:42:34

【回眸】代理SAA职责与注意事项

前言 其实除了运营自己的几个粉丝群之外,还有一个SAA天团群需要运营。先写个文字版的,后续更新再配图。 代理SAA职责与注意事项(会员版) 首先非常感谢你加入SAA天团呀,为俱乐部分担官员角色真的很了不起&#xff01…

作者头像 李华
网站建设 2026/5/1 7:26:17

公司防泄密软件哪个好?分享4款公司防泄密软件APP,2026甄选推荐

公司文件太重要,怕员工倒卖或外泄?急需一款好用的公司防泄密软件来给数据上把“安全锁”? 别急,2026年这4款软件帮你筑牢企业安全防线,一起来看看吧。 一、域智盾软件 文件加密:采用透明加密技术&#xf…

作者头像 李华
网站建设 2026/5/1 7:51:33

基于STM32的家庭安防系统设计

基于STM32的家庭安防系统设计 第一章 绪论 传统家庭安防多依赖单一的门窗防盗锁或独立报警设备,存在监测维度有限、报警响应滞后、缺乏远程联动等问题,难以形成全方位、智能化的安全防护体系。STM32单片机凭借高集成度、实时控制能力和丰富的通信接口&am…

作者头像 李华
网站建设 2026/5/1 7:57:30

发现 XSS 漏洞?别急,用这招 SpringBoot 技巧轻松搞定!

发现 XSS 漏洞?别急,用这招 SpringBoot 技巧轻松搞定! 引言 随着Web应用的普及,网络安全问题也日益凸显。跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的Web安全漏洞,它允…

作者头像 李华
网站建设 2026/5/1 5:46:27

滑轨铰链哪个品牌好耐用?一文读懂如何选对耐用五金品牌

选择柜门滑轨和铰链,耐用性是首要考量。市面上品牌众多,如何挑选真正耐用、好用的产品?本文将为您系统梳理,助您做出明智决策。一、 国货优选:炬森五金,耐用技术的集大成者在国产五金品牌中,炬森…

作者头像 李华