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

目录
相关文章
|
存储 数据挖掘 数据处理
Pandas中explode()函数的应用与实战
Pandas中explode()函数的应用与实战
659 0
|
定位技术 Python
python获取高德地图天气webAPI接口的解决方案
python获取高德地图天气webAPI接口的解决方案
673 0
|
2月前
|
存储 设计模式 缓存
为生产级 AI Agent 构建持久化记忆:五阶段流水线与四种设计模式
LLM Agent需持久化记忆以支撑连续对话、用户画像、知识沉淀与崩溃恢复。但满上下文方案成本高、延迟大、易出错。本文提出五阶段流水线(抽取→整合→存储→检索→遗忘)与四种记忆类型(工作/情景/语义/过程记忆),结合结构化状态+向量搜索等设计模式,实现高效、可控、可审计的生产级记忆系统。
640 9
为生产级 AI Agent 构建持久化记忆:五阶段流水线与四种设计模式
|
5月前
|
消息中间件 运维 监控
别只盯着充电枪:聊聊一个真正“能赚钱、能扩展、能运维”的智慧充电桩系统架构
别只盯着充电枪:聊聊一个真正“能赚钱、能扩展、能运维”的智慧充电桩系统架构
306 7
|
数据挖掘 数据处理 数据库
Pandas数据聚合:groupby与agg
Pandas库中的`groupby`和`agg`方法是数据分析中不可或缺的工具,用于数据分组与聚合计算。本文从基础概念、常见问题及解决方案等方面详细介绍这两个方法的使用技巧,涵盖单列聚合、多列聚合及自定义聚合函数等内容,并通过代码案例进行说明,帮助读者高效处理数据。
1953 32
|
SQL 数据挖掘 索引
Pandas数据筛选的5种技巧
Pandas数据筛选的5种技巧
1262 1
|
数据采集 存储 数据可视化
Pandas高级数据处理:数据报告生成
Pandas 是数据分析领域不可或缺的工具,支持多种文件格式的数据读取与写入、数据清洗、筛选与过滤。本文从基础到高级,介绍如何使用 Pandas 进行数据处理,并解决常见问题和报错,如数据类型不一致、时间格式解析错误、内存不足等。最后,通过数据汇总、可视化和报告导出,生成专业的数据报告,帮助你在实际工作中更加高效地处理数据。
448 8
|
图形学
Unity UGUI拖拽移动
本文介绍了两种UI拖拽实现方式:精准拖拽和克隆拖拽。精准拖拽通过计算鼠标点击点与UI中心的偏移量,使UI跟随鼠标移动,适用于需要精确控制的场景。代码中通过`IBeginDragHandler`、`IDragHandler`和`IEndDragHandler`接口实现拖拽逻辑。克隆拖拽则在拖拽时克隆一个UI对象,使其跟随鼠标移动,适合视觉效果需求较高的场景。代码中同样使用上述接口,并在拖拽结束时销毁克隆对象。具体实现可参考提供的代码示例。
659 10
|
数据采集 数据挖掘 数据处理
如何在Pandas中将索引(index)转换为数据列
如何在Pandas中将索引(index)转换为数据列
1366 0
多进程同步之文件锁
【10月更文挑战第16天】文件锁是一种常用的多进程同步机制,它可以用于确保多个进程在访问共享资源时的互斥性。在使用文件锁时,需要注意锁的粒度、释放、竞争和性能等问题。通过合理使用文件锁,可以提高多进程程序的正确性和性能