🐸 青蛙编程网
首页 / Python / Pandas / 5. 实战

实战:销售数据分析

这是什么:一次销售数据分析实战,把前三章的招式连起来打一遍。

为什么用:前三章的招式各管一段,学得越多反而越容易忘。不串成一个完整任务,就不知道 DataFrame 到底能替你干多少活。

如何用:拿饮品店一周的订单练手,数据直接写在代码里,复制走就能跑,不用下载任何文件。

任务:下面是一家饮品店一周的订单(5 天 × 每天卖 4 种饮品),要回答 4 个问题——

  1. 一周总销售额是多少?
  2. 每种商品各卖了多少杯?
  3. 哪一天销量最高?
  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 排座次。

动手改

  1. 把咖啡的单价从 18 改成 20,重新运行,看看总销售额和销售额排名变了没
  2. 再加一行 10-17 的"奶茶"订单(数量 3),销量最高的一天还是周五吗?
  3. 挑战:算出每天的平均每单金额(提示:df.groupby("日期")["金额"].mean())

Pandas 毕业 🎉 想让程序变聪明?去 AI 板块 看看机器学习 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。