📖 知识点
1. 什么是数据透视表?
透视表把数据重新 "摆盘":一个维度放行、一个维度放列,交叉格子填统计值。比如行 = 菜系、列 = 时段、格子 = 销量,一张表看清 "每个菜系在午 / 晚餐的销量"。
💡 生活比喻 多列分组的结果是 "一长串",透视表把它 "摊平" 成表格 —— 行是菜系、列是时段,纵横交叉,一目了然。
2. pivot_table 基础语法
df.pivot_table(values="销量", index="菜系", columns="时段", aggfunc="sum")
values:要统计的列(数值)index:放 "行" 的维度columns:放 "列" 的维度aggfunc:聚合方式(sum/mean 等),默认 mean
运行输出:
时段 午餐 晚餐
菜系
川菜 60 80
鲁菜 40 50
粤菜 30 20
3. 对比多列分组
# 分组写法:竖着的一串
df.groupby(["菜系","时段"])["销量"].sum()
# 透视写法:横竖摊平的表格
df.pivot_table(values="销量", index="菜系", columns="时段", aggfunc="sum")
两者数据一样,但透视表更直观,适合把结果直接 "看" 出来。
⚠️ 易错提醒
pivot_table的参数名是values(统计列)、index(行维度)、columns(列维度)、aggfunc(聚合方式)aggfunc默认是 mean(均值),想求和要显式写aggfunc="sum"- 别忘了
values,它决定中间格子里填哪列的数据
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份数据(菜系、时段、销量、价格)
- 用
pivot_table(values="销量", index="菜系", columns="时段", aggfunc="sum")生成透视表 - 用
aggfunc="mean"再生成一张均值透视表 - 打印两张透视表,对比 sum 和 mean
- 观察行 × 列交叉的统计规律
参考代码
import pandas as pd
data = {
"菜系": ["川菜", "川菜", "鲁菜", "鲁菜", "粤菜", "粤菜"],
"时段": ["午餐", "晚餐", "午餐", "晚餐", "午餐", "晚餐"],
"销量": [60, 80, 40, 50, 30, 20],
}
df = pd.DataFrame(data)
# 透视起锅:生成透视表
print("===== 透视表:菜系(行) × 时段(列),销量求和 =====")
print(df.pivot_table(values="销量", index="菜系", columns="时段", aggfunc="sum"))
print("\n===== 透视表:销量均值 =====")
print(df.pivot_table(values="销量", index="菜系", columns="时段", aggfunc="mean"))
运行输出:
===== 透视表:菜系(行) × 时段(列),销量求和 =====
时段 午餐 晚餐
菜系
川菜 60 80
鲁菜 40 50
粤菜 30 20
===== 透视表:销量均值 =====
时段 午餐 晚餐
菜系
川菜 60 80
鲁菜 40 50
粤菜 30 20
💡 观察:这张透视表以 "菜系" 为行、"时段" 为列,交叉格子是销量。一眼看出:川菜晚餐卖得最好 (80)、粤菜晚餐最低 (20)。这就是透视表的直观优势。
🧠 思考题
- 透视表的 "行、列、值、聚合方式" 分别由哪 4 个参数控制?
- 透视表和
groupby分组统计的结果有什么异同?什么场景用透视表更合适?