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

所以本文将介绍10个实际工作中比较有用的技巧,文章的代码都是可以直接拿来用。
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 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 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 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 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 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 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 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 flat = df3.groupby("team", as_index=False).agg({"score": "sum"})
print(flat)对接 API 或者导入 BI 工具时,扁平结构往往更方便。
team score
0 A 25
1 B 27 pivot = pd.pivot_table(
df3,
values="score",
index="team",
columns="year",
aggfunc="sum"
)
print(pivot)这种交叉统计的表格在做汇总分析时经常用到。
year 2023 2024
team
A 10 15
B 7 20groupby 的功能远比表面看起来丰富。agg 处理多指标汇总,transform 生成组级特征,MultiIndex 分组配合 pivot_table 可以快速构建复杂的数据视图。熟练掌握这些用法之后,很多数据处理任务的代码量能减少不少。
多指标统计用 agg,命名聚合让代码更清晰,组内特征计算靠 transform,业务逻辑封装成自定义函数,多维度报表用 MultiIndex 和透视表组合。
本文分享自 DeepHub IMBA 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!