烹制篇-Day18|调料聚合:agg 聚合函数:sum /mean/max /min

0 次阅读 2026-10-21 15:14

📖 知识点

1. 什么是聚合(aggregation)?

聚合:把一组多行数据,浓缩成一个(或几个)汇总值。前面用过的 sum/mean/max/min 都是聚合函数。agg 让它们能组合使用。

💡 生活比喻 一盘菜只算一个指标(只尝咸淡)信息不够;agg 就是一次性 "尝尝咸淡、看看火候、闻闻香气"—— 综合评判。

2. agg () 基本用法

对单列算多个指标:

# 对"销量"列算 sum、mean、max、min
df["销量"].agg(["sum", "mean", "max", "min"])

运行输出:

sum     200
mean     33.33
max      60
min      20
Name: 销量, dtype: float64

3. 对多列分别聚合

# 对"销量"求和、"价格"求均值
df.agg({"销量": "sum", "价格": "mean"})

4. 分组 + agg 组合(最强用法)

# 按菜系分组,销量求sum和mean
df.groupby("菜系")["销量"].agg(["sum", "mean"])

运行输出:

      sum   mean
菜系
川菜  140   70.0
鲁菜   90   45.0
粤菜   50   25.0

分组 + 多聚合,同时看出 "每组总量" 和 "每组平均",信息更全。

⚠️ 易错提醒

  1. agg 传入字符串列表如 ["sum","mean"],别用错格式
  2. 对多列不同聚合,用字典 {"列名": "聚合方法"}
  3. 分组 + agg 时,["销量"] 选择列、.agg([...]) 选择多个指标

⚔️ Kata 实战任务

任务需求:

  1. 导入 pandas,创建一份 "菜系销售" 数据
  2. 用 df["销量"].agg(["sum","mean","max","min"]) 对销量算多个指标
  3. 用 df.agg({"销量":"sum","价格":"mean"}) 对不同列分别聚合
  4. 用 df.groupby("菜系")["销量"].agg(["sum","mean"]) 分组 + 多聚合
  5. 打印结果,理解 agg 的组合威力

参考代码

import pandas as pd

data = {
    "菜系": ["川菜", "鲁菜", "川菜", "粤菜", "鲁菜"],
    "菜名": ["麻婆豆腐", "葱爆羊肉", "回锅肉", "白切鸡", "糖醋鱼"],
    "价格": [20, 35, 25, 30, 40],
    "销量": [60, 40, 80, 30, 50],
}
df = pd.DataFrame(data)

# 调料聚合1:对销量算多个指标
print("===== 销量多个指标 =====")
print(df["销量"].agg(["sum", "mean", "max", "min"]))

# 调料聚合2:不同列不同聚合
print("\n===== 销量求和、价格均值 =====")
print(df.agg({"销量": "sum", "价格": "mean"}))

# 调料聚合3:分组 + 多聚合
print("\n===== 按菜系分组,销量sum和mean =====")
print(df.groupby("菜系")["销量"].agg(["sum", "mean"]))

运行输出:

===== 销量多个指标 =====
sum     260
mean    52.0
max      80
min      30
Name: 销量, dtype: float64

===== 销量求和、价格均值 =====
销量    260.000000
价格     30.000000
Name: 菜系, dtype: float64

===== 按菜系分组,销量sum和mean =====
      sum   mean
菜系
川菜   140   70.0
鲁菜    90   45.0
粤菜    30   30.0

🧠 思考题

  1. df["销量"].agg(["sum","mean"]) 和 df["销量"].sum() 有什么区别?什么时候用 agg 更方便?
  2. 分组 + agg(["sum","mean"]) 相比只算 sum,多获得了什么信息?