Pandas GroupBy 的 10 个实用技巧

简介: 本文介绍Pandas中groupby的10个实用技巧,突破传统聚合认知。涵盖多函数聚合、结果命名、transform特征构造、组内累积计算、自定义逻辑、唯一值统计、分类分组、多级索引、扁平化输出及透视表结合应用,助你高效处理复杂数据场景,提升数据分析效率。(238字)

很多人把 groupby 理解成单纯的求和、计数这类操作,比如说算算总收入、数数用户量,然后就没了。实际上它的应用场景要广得多:计算组内特征、数据标准化、构造滚动指标、合并不同维度的统计结果,甚至处理一些复杂的嵌套数据结构。

所以本文将介绍10个实际工作中比较有用的技巧,文章的代码都是可以直接拿来用。

1、一次性应用多个聚合函数

 import pandas as pd  

df = pd.DataFrame({  
    "team": ["A", "A", "B", "B"],  
    "score": [10, 15, 7, 20]  
})  
result = df.groupby("team").agg({  
    "score": ["sum", "mean", "max"]  
})  
print(result)
####
    score               
            sum  mean  max  
    team                      
    A        25  12.5   15  
     B        27  13.5   20

2、聚合后对结果进行命名

 result = df.groupby("team").agg(  
    total_score=("score", "sum"),  
    avg_score=("score", "mean"),  
    max_score=("score", "max")  
)  

print(result)
###
    total_score  avg_score  max_score  
    team                                      
    A              25       12.5         15  
     B              27       13.5         20

3、transform

 df["team_avg"] = df.groupby("team")["score"].transform("mean")  
 print(df)

每一行现在都带上了所属组的均值,这在特征工程里特别常用。

     team  score  team_avg  
     0    A     10      12.5  
     1    A     15      12.5  
     2    B      7      13.5  
     3    B     20      13.5

4、组内累积计算

 df["cumulative_score"] = (  
     df.groupby("team")["score"]  
       .transform(lambda s: s.cumsum())  
 )  

 print(df)

累积和会在每个分组内部重新开始计算。

 team  score  team_avg  cumulative_score  
     0    A     10      12.5                10  
     1    A     15      12.5                25  
     2    B      7      13.5                 7  
     3    B     20      13.5                27

5、自定义聚合逻辑

 defscore_range(s):  
     returns.max() -s.min()  

 result=df.groupby("team")["score"].agg(score_range)  
 print(result)

一些复杂的业务指标基本都可以用这种方式实现。

     team  
     A     5  
     B    13  
     Name: score, dtype: int64

6、统计唯一值

 df2=pd.DataFrame({  
    "team": ["A", "A", "B", "B", "B"],  
    "member": ["x", "y", "x", "x", "z"]  
})  

unique_counts=df2.groupby("team")["member"].nunique()  
unique_sets=df2.groupby("team")["member"].apply(set)  

print(unique_counts)  
print(unique_sets)

####
    team  
    A    2  
    B    2  
    Name: member, dtype: int64  


   team  
   A       {x, y}  
   B    {x, z}  
   Name: member, dtype: object

7、按类别分组的正确姿势

 df2["team"] = df2["team"].astype("category")  

 result = df2.groupby("team", observed=False)["member"].count()  
 print(result)

做报表的时候有些预定义的类别即使没数据也需要显示出来,这时候这个参数就派上用场了。

     team  
     A    2  
     B    3  
     Name: member, dtype: int64

8、多层级分组

 df3 = pd.DataFrame({  
    "team": ["A", "A", "B", "B"],  
    "year": [2023, 2024, 2023, 2024],  
    "score": [10, 15, 7, 20]  
})  

result = df3.groupby(["team", "year"])["score"].sum()  
 print(result)

队列分析或者按时间切片的场景基本就是这个结构。

  team  year  
     A     2023    10  
           2024    15  
     B     2023     7  
           2024    20  
     Name: score, dtype: int64

9、扁平化输出

 flat = df3.groupby("team", as_index=False).agg({"score": "sum"})  
 print(flat)

对接 API 或者导入 BI 工具时,扁平结构往往更方便。

      team  score  
     0    A     25  
     1    B     27

10、结合透视表使用

 pivot = pd.pivot_table(  
    df3,  
    values="score",  
    index="team",  
    columns="year",  
    aggfunc="sum"  
)  

 print(pivot)

这种交叉统计的表格在做汇总分析时经常用到。

     year  2023  2024  
     team                
     A       10    15  
     B        7    20

总结

groupby 的功能远比表面看起来丰富。agg 处理多指标汇总,transform 生成组级特征,MultiIndex 分组配合 pivot_table 可以快速构建复杂的数据视图。熟练掌握这些用法之后,很多数据处理任务的代码量能减少不少。

多指标统计用 agg,命名聚合让代码更清晰,组内特征计算靠 transform,业务逻辑封装成自定义函数,多维度报表用 MultiIndex 和透视表组合。

https://avoid.overfit.cn/post/da6bdf53716948b7bd26eddc31ea94a4

目录
相关文章
|
14天前
|
数据采集 人工智能 监控
[数据集]作弊行为检测数据集(1100张图片已划分)[目标检测]
基于视觉 AI 的作弊行为检测正逐渐走向成熟,从简单的屏幕监控、人工复查逐步迈向自动化、实时化与精准识别。本数据集的构建,旨在为研究者与开发者提供一套轻量但高价值的训练数据,使智能监考系统能更好地识别作弊动作,尤其是使用手机等严重违规行为。
182 49
[数据集]作弊行为检测数据集(1100张图片已划分)[目标检测]
|
18天前
|
SQL 人工智能 自然语言处理
Apache Doris 4.0 版本正式发布:全面升级 AI 与搜索能力,强化离线计算
Apache Doris 4.0 正式发布!深度融合AI与搜索能力,支持向量索引、AI函数、全文检索打分,强化离线计算稳定性,提升查询性能与数据质量,助力企业构建高效实时数仓。
208 11
Apache Doris 4.0 版本正式发布:全面升级 AI 与搜索能力,强化离线计算
|
15天前
|
算法 大数据 数据挖掘
数据嗅探社会热点:我们靠“感觉”,机器靠“证据”
数据嗅探社会热点:我们靠“感觉”,机器靠“证据”
160 6
|
6天前
|
机器学习/深度学习 传感器 算法
BipedalWalker实战:SAC算法如何让机器人学会稳定行走
本文探讨基于Soft Actor-Critic(SAC)算法的下肢假肢自适应控制。传统方法依赖精确建模,难以应对复杂环境变化。SAC通过最大熵强化学习,使假肢在仿真中自主探索、学习稳定步态,具备抗干扰与容错能力。结合生物工程视角,将神经网络映射为神经系统,奖励函数关联代谢效率,实现从试错到自然行走的演化。相位图分析显示极限环形成,标志动态稳定步态建立,能效曲线表明后期动作更节能。研究为智能假肢迈向临床应用提供新思路。
200 117
BipedalWalker实战:SAC算法如何让机器人学会稳定行走
|
人工智能 Java 测试技术
代码采纳率如何提升至50%?AI 自动编写单元测试实践总结
借助Aone Copilot Agent,通过标准化Prompt指导AI生成单元测试代码,实现50%代码采纳率,显著提升测试效率与质量,推动团队智能化研发转型。
290 20
|
9天前
|
人工智能 JSON 机器人
从零开始:用Python和Gemini 3四步搭建你自己的AI Agent
AI Agent并非玄学,核心仅为“循环 + 大模型 + 工具函数”。本文教你用Gemini 3从零搭建能读写文件、执行指令的命令行助手,拆解其“观察-思考-行动”循环机制,揭示智能体背后的简洁本质。
206 17
从零开始:用Python和Gemini 3四步搭建你自己的AI Agent
|
7天前
|
存储 人工智能 自然语言处理
构建AI智能体:三十七、从非结构化文本到结构化知识:基于AI的医疗知识图谱构建与探索
知识图谱是一种用图结构表示实体及其关系的技术,通过三元组(主体-关系-客体)构建语义网络。文章以医疗领域为例,详细介绍了知识图谱的构建流程:数据预处理、实体识别、关系抽取、知识融合、存储与可视化等步骤。知识图谱可应用于智能问答、辅助诊断、药物研发等场景,其结构化特性可弥补大语言模型的不足,二者结合能提升AI系统的准确性和可解释性。文章还展示了基于大模型的医疗知识图谱构建代码示例,涵盖实体识别、关系抽取、图谱存储和智能问答等核心功能,体现了知识图谱在专业领域的实用价值。
186 12
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
教育行业如何做GEO?让AI成为你的课程推荐官
过去,学生找课程靠搜索;现在,他们直接问AI:“附近有哪些性价比高的编程课?”或“商科最好的在线大学?”——AI不会简单罗列链接,而是直接推荐答案。如果你的教育机构没被AI“看见”,可能已经错过了新一轮流量红利。 作为深耕GEO领域的实战团队,数聚酷科技结合教育行业特性,总结出以下可落地的GEO优化策略,帮助你的课程和…
98 6
|
21天前
|
JavaScript 前端开发 算法
Vue 与 React 深度对比:底层原理、开发体验与实际性能
本文深入对比Vue 3/Vue 4与React 19的核心原理、性能差异与开发体验。Vue基于Proxy响应式与编译优化,追求自动高效;React依托虚拟DOM、Fiber架构与并发渲染,强调灵活可控。两者在更新粒度、语法范式、学习曲线和生态上各有优劣。Vue适合快速开发与中小型项目,React更适配复杂交互与高定制需求。未来Vue趋向信号机制与Vapor Mode,React发力服务端组件与自动记忆化。选择应基于团队能力、项目场景与维护成本,追求技术适配性而非先进性。
232 6
|
2月前
|
机器学习/深度学习 数据可视化 算法
sklearn 特征选择实战:用 RFE 找到最优特征组合
特征越多模型未必越好,过多特征易导致过拟合、训练慢、难解释。递归特征消除(RFE)通过反复训练与特征评分,逐步剔除不重要特征,提升模型泛化能力与效率。本文详解RFE原理,并用scikit-learn实战葡萄酒数据集,展示如何结合逻辑回归与随机森林进行特征选择,比较不同模型的筛选差异,并通过RFECV自动确定最优特征数量,辅以可视化分析,帮助构建更简洁、高效、可解释的模型。
183 1
sklearn 特征选择实战:用 RFE 找到最优特征组合