数据透视表与交叉制表
使用 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 反馈 — 无需本地设置。
此课程中的所有课时
- GroupBy 与聚合
- 数据透视表与交叉制表
- 高级合并与连接
- Pandas 中的时间序列