0Pricing
Learn AI with Python · 课时

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. GroupBy 与聚合
  2. 数据透视表与交叉制表
  3. 高级合并与连接
  4. Pandas 中的时间序列
← 返回 Learn AI with Python