📖 知识点回顾
groupby()分组统计agg()多指标聚合(sum/mean/count)pivot_table()数据透视表value_counts()频次、占比sort_values()排序找极值corr()相关分析
💡 分析流程(标准套路)看概览 → 频次统计(分布)→ 分组聚合(各组总量 / 均值)→ 透视(交叉维度)→ 排序找极值 → 相关(找关系)→ 汇总结论
⚔️ Kata 实战任务
任务需求:
导入 pandas,创建一份 "菜系 × 时段销售" 数据(含菜系、时段、菜名、销量、价格)
用
value_counts()统计各菜系占比用
groupby+agg计算各菜系销量总和、均值、菜品数量用
pivot_table生成菜系 (行)× 时段 (列) 的销量透视表用
sort_values找销量最高的菜系汇总打印一份 "分析结论"
参考代码
import pandas as pd
data = {
"菜系": ["川菜", "川菜", "川菜", "鲁菜", "鲁菜", "粤菜", "粤菜", "粤菜"],
"时段": ["午餐", "晚餐", "午餐", "午餐", "晚餐", "午餐", "晚餐", "午餐"],
"菜名": ["麻婆豆腐", "回锅肉", "水煮鱼", "葱爆羊肉", "糖醋鱼", "白切鸡", "叉烧", "烧鹅"],
"销量": [60, 80, 50, 40, 55, 30, 20, 45],
"价格": [20, 25, 28, 35, 40, 30, 26, 32],
}
df = pd.DataFrame(data)
print("===== 1. 各菜系占比 =====")
print(df["菜系"].value_counts(normalize=True).round(3))
print("\n===== 2. 各菜系销量聚合(总和/均值/数量)=====")
print(df.groupby("菜系")["销量"].agg(["sum", "mean", "count"]))
print("\n===== 3. 透视表:菜系(行) × 时段(列) =====")
print(df.pivot_table(values="销量", index="菜系", columns="时段", aggfunc="sum"))
print("\n===== 4. 销量最高的菜系 =====")
top = df.groupby("菜系")["销量"].sum().sort_values(ascending=False)
print(top)
# ===== 汇总结论 =====
print("\n===== 📝 分析结论 =====")
best = top.index[0]
print(f"1. 销量最高的菜系是「{best}」")
print(f"2. 「{best}」全天销量为 {top.iloc[0]},占比较突出")
print("3. 结合透视表可进一步看出午/晚餐的销量差异")
运行输出:
===== 1. 各菜系占比 =====
川菜 0.375
粤菜 0.375
鲁菜 0.250
Name: 菜系, dtype: float64
===== 2. 各菜系销量聚合(总和/均值/数量)=====
sum mean count
菜系
川菜 190 63.33 3
鲁菜 95 47.50 2
粤菜 95 31.67 3
===== 3. 透视表:菜系(行) × 时段(列) =====
时段 午餐 晚餐
菜系
川菜 110 80
鲁菜 40 55
粤菜 75 20
===== 4. 销量最高的菜系 =====
川菜 190
鲁菜 95
粤菜 95
Name: 销量, dtype: int64
===== 📝 分析结论 =====
1. 销量最高的菜系是「川菜」
2. 「川菜」全天销量为 190,占比较突出
3. 结合透视表可进一步看出午/晚餐的销量差异
🧠 思考题
综合流程里,
value_counts(占比)、groupby+agg(总量)、pivot_table(交叉)分别回答了哪类分析问题?如果要把这份分析结果画成图表(如柱状图看各菜系销量),该选哪些数据?下一篇章要学可视化,猜猜该用哪个方法?
行者孙Python