实战:销售数据分析
这是什么:一次销售数据分析实战,把前三章的招式连起来打一遍。
为什么用:前三章的招式各管一段,学得越多反而越容易忘。不串成一个完整任务,就不知道 DataFrame 到底能替你干多少活。
如何用:拿饮品店一周的订单练手,数据直接写在代码里,复制走就能跑,不用下载任何文件。
任务:下面是一家饮品店一周的订单(5 天 × 每天卖 4 种饮品),要回答 4 个问题——
- 一周总销售额是多少?
- 每种商品各卖了多少杯?
- 哪一天销量最高?
- 给老板提个进货建议(结论)
完整代码
import pandas as pd
orders = {
"日期": ["2026-10-13", "2026-10-13", "2026-10-13", "2026-10-13",
"2026-10-14", "2026-10-14", "2026-10-14", "2026-10-14",
"2026-10-15", "2026-10-15", "2026-10-15", "2026-10-15",
"2026-10-16", "2026-10-16", "2026-10-16", "2026-10-16",
"2026-10-17", "2026-10-17", "2026-10-17", "2026-10-17"],
"商品": ["奶茶", "咖啡", "果汁", "柠檬水"] * 5,
"数量": [2, 2, 4, 5, 6, 1, 2, 3, 2, 5, 3, 2, 4, 3, 5, 4, 5, 2, 1, 6],
"单价": [12, 18, 10, 6] * 5,
}
df = pd.DataFrame(orders)
df["金额"] = df["数量"] * df["单价"] # 每单金额 = 数量 × 单价
print(df.head()) # 先验货:扫一眼前 5 行
# 1. 一周总销售额
print("总销售额:", df["金额"].sum(), "元")
# 2. 每种商品的销量
print("\n每种商品销量(杯):")
print(df.groupby("商品")["数量"].sum())
# 3. 销量最高的一天
by_day = df.groupby("日期")["数量"].sum()
print("\n销量最高的一天:", by_day.idxmax(), "共", by_day.max(), "杯")
# 4. 每种商品的销售额(给结论用)
print("\n每种商品销售额(元):")
print(df.groupby("商品")["金额"].sum().sort_values(ascending=False))
完整输出
日期 商品 数量 单价 金额
0 2026-10-13 奶茶 2 12 24
1 2026-10-13 咖啡 2 18 36
2 2026-10-13 果汁 4 10 40
3 2026-10-13 柠檬水 5 6 30
4 2026-10-14 奶茶 6 12 72
总销售额: 732 元
每种商品销量(杯):
商品
咖啡 13
奶茶 19
果汁 15
柠檬水 20
Name: 数量, dtype: int64
销量最高的一天: 2026-10-16 共 16 杯
每种商品销售额(元):
商品
咖啡 234
奶茶 228
果汁 150
柠檬水 120
Name: 金额, dtype: int64
(中文列对齐在不同终端里会略有差别,能看清即可。)
代码里用了哪些旧招?
| 代码 | 出处 |
|---|---|
字典造 DataFrame、新增 "金额" 列 |
Series 与 DataFrame |
head() 验货 |
Series 与 DataFrame |
groupby 分组求和 |
统计与筛选 |
idxmax() / sort_values() |
本章新面孔,见下 |
两个新朋友:idxmax() 返回最大值所在的标签(哪一天),sort_values(ascending=False) 把结果从大到小排序。
参考结论
拿到数字只是第一步,把数字变成话才是分析:
- 一周总销售额 732 元,10 月 16 日(周五)是高峰,卖了 16 杯
- 柠檬水卖得杯数最多(20 杯),但单价只有 6 元,销售额垫底
- 咖啡只卖出 13 杯,却贡献了最高销售额 234 元——量小利厚
- 给老板的建议:柠檬水薄利多销负责引流,咖啡保证供应撑起营收
记忆口诀
先验货再动刀,groupby 是分析的心脏,idxmax 找冠军,sort_values 排座次。
动手改
- 把咖啡的单价从 18 改成 20,重新运行,看看总销售额和销售额排名变了没
- 再加一行 10-17 的"奶茶"订单(数量 3),销量最高的一天还是周五吗?
- 挑战:算出每天的平均每单金额(提示:
df.groupby("日期")["金额"].mean())
Pandas 毕业 🎉 想让程序变聪明?去 AI 板块 看看机器学习 🐸