当前位置: 首页 > news >正文

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 数据分析!🚀

http://www.jsqmd.com/news/337792/

相关文章:

  • 03字符和字符串 - LI,Yi
  • 2026数据爬虫实战:如何高效采集Google地图数据的动态IP策略
  • 24位采集卡AD7190用STC51驱动的程序
  • 计算机SSM毕设实战-基于ssm的铜产品商城管理系统铜工业品工艺品销售管理商城的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 美国AI求职服务哪家高效:AI服务独家攻略 - 技研备忘录
  • AI智能体开发概念-MCP简介 - 努力-
  • 【课程设计/毕业设计】基于ssm的铜产品商城销售管理系统铜金属货源采购批发零售平台【附源码、数据库、万字文档】
  • 2026 技术实测:域前置(Domain Fronting)未死?EdgeOne 的深度“奇技淫巧”
  • 2026年四川江苏靠谱的陶坛生产企业盘点,有经验的厂家别错过 - mypinpai
  • 学霸同款8个降AIGC平台 千笔·专业降AI率智能体解决论文查重难题
  • 2026国内最新板材十大源头厂家推荐!山东等地优质板材品牌权威榜单发布,资质服务双优助力高品质家居 - 品牌推荐2026
  • 拒绝工业铁柜,适合豪宅的高端保险箱品牌排行榜 - 博客万
  • 【扫盲】大模型部署落地相关技术栈
  • 直接上硬货!最近用STM32F103搞了个数控Buck电源,实测效率干到96%,能通过程序直接调电压,这玩意做出来是真的爽。咱们不整虚的,直接拆开看门道
  • 沃尔玛购物卡回收怎么选?五大标准教你避开陷阱 - 京回收小程序
  • 计算机SSM毕设实战-基于ssm的常熟非物质文化遗产展示平台非遗数字化管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 瑞祥商联卡回收三步到账,正规平台实现快速回收 - 京回收小程序
  • 计算机毕业设计之springboot基于微信小程序的图书馆座位管理系统的设计与实现
  • 【无人机控制】基于matlab无人机集群完成污染物云团的追踪与监测任务,无人机动力学模型、机间通信协议、电池续航限制、云团扩散模型【含Matlab源码 15056期】
  • 五大关键指标筛选优质音乐喷泉厂家:2026年喷泉厂家权威推荐清单 - 深度智识库
  • 吴恩达深度学习课程五:自然语言处理 第三周:序列模型与注意力机制(四)语音识别和触发字检测
  • 收藏!DeepSeek薪资刷新行业认知,程序员/大模型小白必看,顶薪岗位无经验可投
  • 2026成都消防设施操作员培训机构推荐 - 深度智识库
  • 渠道数据采集方法有哪些?国内好用的渠道数据采集/渠道数据管理服务商推荐 - 麦麦唛
  • 实用指南:机器学习日报06
  • Comsol弱形式求解三维光子晶体能带
  • AI大模型时代:谁在摧毁2025年中国的企业软件产业?白嫖,开源,外包,招标,数科,AI...
  • 2026年湖北武汉二手房买卖/新房分销/工抵房分销/商铺买卖/写字楼买卖服务商推荐指南 - 2026年企业推荐榜
  • 必收藏|Java后端转大模型保姆级指南,小白程序员也能轻松入门不踩坑
  • 供暖季来临,盘点那些备受好评的散热器品牌,工业暖风机/散热器/高大空间冷暖风机/干冷器/乏风取热箱,散热器厂商排行榜单 - 品牌推荐师