📖 知识点
1. 多列分组
groupby 可以一次按多个字段分组(先按第一个、再按第二个细分):
# 按"菜系"和"时段"两层分组
df.groupby(["菜系", "时段"])["销量"].sum()
运行输出:
菜系 时段
川菜 午餐 60
晚餐 80
鲁菜 午餐 40
晚餐 50
Name: 销量, dtype: int64
两层分组后,可以精确看到 "川菜的午餐、晚餐各卖多少"。
2. 多列分组 + 多指标聚合(最强组合)
# 按菜系+时段分组,销量算sum和mean,同时计数
df.groupby(["菜系", "时段"])["销量"].agg(["sum", "mean", "count"])
3. 对多列各算不同指标
# 按菜系分组,销量求和、价格求均值
df.groupby("菜系").agg({"销量": "sum", "价格": "mean"})
agg({"销量":"sum", "价格":"mean"})用字典对不同列配不同聚合方法。
完整示例
import pandas as pd
data = {
"菜系": ["川菜", "川菜", "鲁菜", "鲁菜"],
"时段": ["午餐", "晚餐", "午餐", "晚餐"],
"销量": [60, 80, 40, 50],
}
df = pd.DataFrame(data)
# 多列分组 + 多指标
print(df.groupby(["菜系", "时段"])["销量"].agg(["sum", "mean", "count"]))
运行输出:
sum mean count
菜系 时段
川菜 午餐 60 60.0 1
晚餐 80 80.0 1
鲁菜 午餐 40 40.0 1
晚餐 50 50.0 1
💡 理解
- 多列分组:
groupby(["列1","列2"])按两层细分- 多指标聚合:
.agg(["sum","mean","count"])一次算多个指标- 不同列不同聚合:
.agg({"销量":"sum","价格":"mean"})- 三者可任意组合,得到精细分析表
⚠️ 易错提醒
- 多列分组时
groupby里要传列表["a","b"]- 多指标聚合
agg里传列表["sum","mean"]- 不同列不同聚合用字典,别混用格式
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份数据(菜系、时段、销量、价格)
- 用
groupby(["菜系","时段"])多列分组,对销量求和 - 用
.agg(["sum","mean"])对销量算多指标 - 用
.agg({"销量":"sum","价格":"mean"})对不同列不同聚合 - 打印结果,观察两层分组的精细统计
参考代码
import pandas as pd
data = {
"菜系": ["川菜", "川菜", "鲁菜", "鲁菜", "粤菜", "粤菜"],
"时段": ["午餐", "晚餐", "午餐", "晚餐", "午餐", "晚餐"],
"销量": [60, 80, 40, 50, 30, 20],
"价格": [20, 25, 35, 40, 30, 28],
}
df = pd.DataFrame(data)
# 多味调和1:多列分组,销量求和
print("===== 按菜系+时段分组,销量求和 =====")
print(df.groupby(["菜系", "时段"])["销量"].sum())
# 多味调和2:多列分组 + 多指标
print("\n===== 按菜系+时段分组,销量sum和mean =====")
print(df.groupby(["菜系", "时段"])["销量"].agg(["sum", "mean"]))
# 多味调和3:不同列不同聚合
print("\n===== 按菜系分组,销量求和、价格均值 =====")
print(df.groupby("菜系").agg({"销量": "sum", "价格": "mean"}))
运行输出:
===== 按菜系+时段分组,销量求和 =====
菜系 时段
川菜 午餐 60
晚餐 80
鲁菜 午餐 40
晚餐 50
粤菜 午餐 30
晚餐 20
Name: 销量, dtype: int64
===== 按菜系+时段分组,销量sum和mean =====
sum mean
菜系 时段
川菜 午餐 60 60.0
晚餐 80 80.0
鲁菜 午餐 40 40.0
晚餐 50 50.0
粤菜 午餐 30 30.0
晚餐 20 20.0
===== 按菜系分组,销量求和、价格均值 =====
销量 价格
菜系
川菜 140 22.5
鲁菜 90 37.5
粤菜 50 29.0
🧠 思考题
groupby(["菜系","时段"])相比只按 "菜系" 分组,分析信息精细在哪?- 三种写法(多列分组、多指标 agg、字典 agg)各自适合什么场景?
行者孙Python