GroupBy 与聚合
df.groupby()、agg()、transform()、apply() 以及使用 Named Aggregation 进行命名聚合
GroupBy 与聚合 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
拆分-应用-合并思想
GroupBy 遵循拆分-应用-合并模式:根据键将行拆分为多个组,对每个组应用函数,然后将结果合并为一个数据框。它是大多数分析汇总的基础。
import pandas as pd
df = pd.DataFrame({
"dept": ["A", "A", "B", "B", "B"],
"salary": [50, 70, 40, 60, 80],
})基本 groupby
df.groupby("col") 会创建一个分组对象。链接类似 .mean() 的聚合操作后,会计算每个组的一个值。
print(df.groupby("dept")["salary"].mean())
# dept
# A 60.0
# B 60.0多重聚合
使用 .agg([...]) 可以一次调用多个归约操作,并为每个函数生成一列。
print(df.groupby("dept")["salary"].agg(["mean", "min", "max", "count"]))按列聚合字典
将字典传给 .agg,即可对不同列应用不同函数。
df["bonus"] = [5, 7, 4, 6, 8]
out = df.groupby("dept").agg({"salary": "mean", "bonus": "sum"})
print(out)命名聚合
命名聚合使用 pd.NamedAgg 语法为输出列指定清晰的名称。这样可以避免令人困惑的多级列标题。
out = df.groupby("dept").agg(
avg_salary=("salary", "mean"),
total_bonus=("bonus", "sum"),
)
print(out)按多个键分组
传入列列表即可同时根据多个键分组,并生成分层的(MultiIndex)结果。
df["level"] = ["jr", "sr", "jr", "sr", "sr"]
print(df.groupby(["dept", "level"])["salary"].mean())transform:输出相同形状
.transform() 会返回与 ORIGINAL 行对齐的结果,而不是每组一行的结果。它非常适合将组统计量作为新列添加回原数据。
df["dept_avg"] = df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "dept_avg"]])使用 transform 进行归一化
由于 transform 会将结果广播回每一行,因此您可以在组内进行归一化,例如减去组内的 mean。
df["centered"] = df["salary"] - df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "centered"]])使用 apply 实现自定义逻辑
.apply() 会将每个组(作为子 DataFrame)传递给您的函数。对于内置聚合无法表达的逻辑,请使用它,例如返回每组中排名前 N 的行。
top = df.groupby("dept").apply(lambda g: g.nlargest(1, "salary"))
print(top[["dept", "salary"]])agg、transform 与 apply
agg 会将每个组归约为一个值。transform 会为每个原始行返回一个值。apply 是灵活但较慢的通用方案。请根据清晰度和速度选择最具体的操作。
使用 reset_index 取消分组
GroupBy 结果会将键放入索引中。调用 .reset_index() 可将它们恢复为普通列,而大多数后续代码都需要这种形式。
flat = df.groupby("dept")["salary"].mean().reset_index()
print(flat)
# dept salary
# 0 A 60.0
# 1 B 60.0快速检查
请测试您对 groupby 的理解。
回顾
GroupBy 要点:
- 通过
df.groupby("col")实现拆分-应用-合并 - 使用
.agg([...])以及字典或命名聚合来计算多个统计量 .transform()返回与原始数据形状相同的结果- 使用
.apply()实现任意的组内逻辑 - 始终使用
.reset_index()将分组键还原为普通列
常见问题解答
「GroupBy 与聚合」课时是免费的吗?
是的 — 「GroupBy 与聚合」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「GroupBy 与聚合」这节课中我会学到什么?
df.groupby()、agg()、transform()、apply() 以及使用 Named Aggregation 进行命名聚合 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「GroupBy 与聚合」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- GroupBy 与聚合
- 数据透视表与交叉制表
- 高级合并与连接
- Pandas 中的时间序列