0Pricing
Learn AI with Python · 课时

数据透视表与交叉制表

使用 pd.pivot_table()、pd.crosstab() 重塑数据,以计算汇总统计量

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

通过重塑数据发现规律

数据透视表会将长格式数据重塑为网格,在两个分类轴上汇总一个值。它就是您熟悉的电子表格透视表,只不过可以通过代码实现。

import pandas as pd
df = pd.DataFrame({
    "region": ["E", "E", "W", "W", "E"],
    "product": ["A", "B", "A", "B", "A"],
    "sales": [10, 20, 30, 40, 50],
})

基本 pivot_table

pd.pivot_table 接受 values(要汇总的数值)、index(行)和 columns(列)。默认情况下,它会对重复单元格求平均值。

pt = pd.pivot_table(df, values="sales", index="region", columns="product")
print(pt)
# product     A     B
# region
# E        30.0  20.0
# W        30.0  40.0

选择 aggfunc

设置 aggfunc 可以控制重复项的合并方式:求和、mean、计数等。使用列表可以一次计算多个汇总结果。

pt = pd.pivot_table(df, values="sales", index="region",
                    columns="product", aggfunc="sum")
print(pt)

多个 aggfunc

传入函数列表即可并排计算多个汇总结果。

pt = pd.pivot_table(df, values="sales", index="region",
                    aggfunc=["sum", "mean", "count"])
print(pt)

填充缺失单元格

没有数据的组合会变成 NaN。fill_value 可以替换这些值,通常使用 0,从而生成整洁的报告。

pt = pd.pivot_table(df, values="sales", index="region",
                    columns="product", aggfunc="sum", fill_value=0)
print(pt)

边际(总计)

设置 margins=True 可以追加行总计和列总计,默认标签为“全部”。

pt = pd.pivot_table(df, values="sales", index="region",
                    columns="product", aggfunc="sum",
                    fill_value=0, margins=True)
print(pt)

多个索引层级

向 index 或 columns 传入列表,可以创建分层明细,例如先按地区再按产品。

df["channel"] = ["on", "off", "on", "off", "on"]
pt = pd.pivot_table(df, values="sales",
                    index=["region", "channel"], aggfunc="sum")
print(pt)

使用 crosstab 进行交叉制表

pd.crosstab 是一种专用的数据透视操作,用于 COUNTS 两个分类变量组合出现的频次,无需提供数值列。

ct = pd.crosstab(df["region"], df["product"])
print(ct)
# product   A  B
# region
# E         2  1
# W         1  1

规范化 crosstab

normalize 参数会将计数转换为比例:"index" 表示按行,"columns" 表示按列,True 表示相对于总计。

ct = pd.crosstab(df["region"], df["product"], normalize="index")
print(ct)   # each row sums to 1.0

带 values 的 crosstab

提供 values 和 aggfunc,即可让 crosstab 汇总某个指标,而不是进行计数,这使它与 pivot_table 的界限变得模糊。

ct = pd.crosstab(df["region"], df["product"],
                 values=df["sales"], aggfunc="sum")
print(ct)

pivot_table 与 crosstab

汇总数值时请使用 pivot_table;统计分类组合的频次时请使用 crosstab。crosstab 还可以用一行代码将结果规范化为比例。

快速检查

请测试您对数据重塑的理解。

回顾

数据重塑工具箱:

  • pd.pivot_table(values, index, columns, aggfunc) 用于汇总指标
  • 使用 fill_value 填充空单元格,使用 margins=True 计算总计
  • 使用索引或列的列表创建层级结构
  • pd.crosstab 统计组合频次;normalize 生成比例

常见问题解答

「数据透视表与交叉制表」课时是免费的吗?

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

「数据透视表与交叉制表」这节课中我会学到什么?

使用 pd.pivot_table()、pd.crosstab() 重塑数据,以计算汇总统计量 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

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

「数据透视表与交叉制表」课时需要多长时间?

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

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

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

此课程中的所有课时

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