📖 知识点
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
分组 + 多聚合,同时看出 "每组总量" 和 "每组平均",信息更全。
⚠️ 易错提醒
agg传入字符串列表如["sum","mean"],别用错格式- 对多列不同聚合,用字典
{"列名": "聚合方法"}- 分组 + agg 时,
["销量"]选择列、.agg([...])选择多个指标
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份 "菜系销售" 数据
- 用
df["销量"].agg(["sum","mean","max","min"])对销量算多个指标 - 用
df.agg({"销量":"sum","价格":"mean"})对不同列分别聚合 - 用
df.groupby("菜系")["销量"].agg(["sum","mean"])分组 + 多聚合 - 打印结果,理解 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
🧠 思考题
df["销量"].agg(["sum","mean"])和df["销量"].sum()有什么区别?什么时候用 agg 更方便?- 分组 +
agg(["sum","mean"])相比只算 sum,多获得了什么信息?
行者孙Python