0Pricing
Python Academy · 课时

GroupBy、聚合与数据透视表

使用分组操作和数据透视表汇总数据。

GroupBy、聚合与数据透视表 是 CoddyKit 上的免费 Python Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

groupby 基础

df.groupby("col") 会按照该列的唯一值将 DataFrame 拆分为多个组。链式调用聚合操作即可获得结果。

import pandas as pd

df = pd.DataFrame({
    "dept":["HR","IT","HR","IT","HR"],
    "salary":[60,80,65,90,70]
})
print(df.groupby("dept")["salary"].mean())
# HR    65.0
# IT    85.0

多个聚合函数

使用 agg() 一次应用多个聚合函数。

import pandas as pd

df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
result = df.groupby("dept")["sal"].agg(["mean","max","count"])
print(result)

命名聚合

在 agg() 中使用关键字参数,明确命名输出列(Pandas 0.25 及更高版本)。

import pandas as pd

df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
result = df.groupby("dept").agg(
    avg_sal=("sal","mean"),
    max_sal=("sal","max"),
    count=("sal","size")
)
print(result)

对多列使用 groupby

传入列的列表即可创建层次化分组。

import pandas as pd

df = pd.DataFrame({
    "year":[2023,2023,2024,2024],
    "dept":["HR","IT","HR","IT"],
    "sal":[60,80,65,90]
})
print(df.groupby(["year","dept"])["sal"].sum())

transform()

transform 返回一个与原始索引对齐的 Series,适合将组级统计数据添加回原始 DataFrame。

import pandas as pd

df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
df["dept_avg"] = df.groupby("dept")["sal"].transform("mean")
print(df)

filter()

filter(func) 只保留函数返回 True 的组。

import pandas as pd

df = pd.DataFrame({"dept":["HR","IT","HR"],"sal":[60,80,65]})
# Keep only departments with mean salary > 70:
result = df.groupby("dept").filter(lambda g: g["sal"].mean() > 70)
print(result)

pivot_table

pd.pivot_table 会创建类似电子表格的汇总表,并支持自定义聚合。

import pandas as pd

df = pd.DataFrame({
    "year":[2023,2023,2024,2024],
    "region":["East","West","East","West"],
    "sales":[100,150,120,200]
})
pt = pd.pivot_table(df, values="sales",
                    index="year", columns="region",
                    aggfunc="sum")
print(pt)

crosstab

pd.crosstab 会计算交叉表,适合统计分类值组合的数量。

import pandas as pd

df = pd.DataFrame({"gender":["M","F","M","F","M"],"result":["pass","pass","fail","fail","pass"]})
print(pd.crosstab(df["gender"], df["result"]))

apply()

apply(func) 会将自定义函数应用于每个组的 DataFrame(axis=0),或应用于每一行/列(axis=1)。

import pandas as pd

df = pd.DataFrame({"dept":["HR","IT","HR"],"sal":[60,80,65]})

def range_sal(g):
    return g["sal"].max() - g["sal"].min()

print(df.groupby("dept").apply(range_sal))

使用 unstack() 重塑数据

多级 groupby 之后,使用 unstack() 将最内层的索引级别移到列中。

import pandas as pd

df = pd.DataFrame({"year":[2023,2023,2024],"dept":["HR","IT","HR"],"sal":[60,80,65]})
result = df.groupby(["year","dept"])["sal"].mean().unstack()
print(result)

对时间序列进行重采样

resample("M") 按日历周期对时间序列 DataFrame 分组,从而可以进行按月或按年的聚合。

import pandas as pd

idx = pd.date_range("2024-01-01", periods=90, freq="D")
df = pd.DataFrame({"sales": range(90)}, index=idx)
monthly = df.resample("ME").sum()
print(monthly)

快速检查

groupby().transform("mean") 返回什么?

回顾

groupby 会将数据拆分为多个组以进行聚合。使用 agg() 应用多个函数,使用 transform() 将组统计数据广播回原数据,使用 filter() 删除组,并使用 pivot_table()/crosstab() 生成跨维度汇总。

常见问题解答

「GroupBy、聚合与数据透视表」课时是免费的吗?

是的 — 「GroupBy、聚合与数据透视表」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「GroupBy、聚合与数据透视表」这节课中我会学到什么?

使用分组操作和数据透视表汇总数据。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「GroupBy、聚合与数据透视表」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Series 与 DataFrame 基础
  2. 索引、筛选与布尔掩码
  3. GroupBy、聚合与数据透视表
  4. 合并、连接与数据清洗
← 返回 Python Academy