1 import pandas as pd
 2 
 3 # 加载数据
 4 data = pd.read_csv("./order.csv", encoding="ansi")
 5 # print("data: \n", data)
 6 print("data的列索引: \n", data.columns)
 7 
 8 # 销量中存在销量为0, 或者销量<0的数据
 9 # 删除不正确的数据
10 # ——保留销量>0的数据据
11 bool_index = data.loc[:, "销量"] > 0
12 data = data.loc[bool_index, :]
13 
14 # 1、哪些类别的商品比较畅销?
15 # 按照类别id进行分组, 统计销量的sum
16 # sort_values 排序,默认是升序排序
17 # by 指定按照某列的数据进行排序
18 # ascending = True 升序
19 res = data.groupby(by="类别ID")["销量"].sum().sort_values(ascending=False).head(10)
20 res = pd.pivot_table(
21     data=data,
22     index="类别ID",
23     # columns="类别ID",
24     values="销量",
25     aggfunc="sum"
26 ).sort_values(by="销量", ascending=False).head(10)
27 print("res: \n", res)
28 
29 # 2、哪些商品比较畅销
30 res = data.groupby(by="商品ID")["销量"].sum().sort_values(ascending=False).head(10)
31 res = pd.pivot_table(
32     data=data,
33     index="商品ID",
34     values="销量",
35     aggfunc="sum"
36 ).sort_values(by="销量", ascending=False).head(10)
37 print("res: \n", res)
38 
39 # 3、求不同门店的销售额占比
40 # (1)先计算每一个商品的销售额
41 data.loc[:, "销售额/单个商品"] = data.loc[:, "单价"] * data.loc[:, "销量"]
42 
43 # (2)按照门店编号进行分组,统计每个商品的销售额的sum和
44 all_ = data.groupby(by="门店编号")["销售额/单个商品"].sum()
45 
46 print(all_)
47 # (3)计算占比
48 print("各个门店的占比为:", (all_ / all_.sum()).apply(lambda x: format(x, ".2%")))
49 
50 
51 # 4、哪个时间段是超市的客流高峰期?
52 # (1)因为多个商品对应一个订单ID,每一个订单ID为一个人,需先对ID进行去重
53 # 数据的去重
54 # subset 需要去重的列
55 # inplace = True 修改原数据
56 data.drop_duplicates(subset='订单ID', inplace=True)
57 print("去重之后的数据: \n", data)
58 
59 # (2)获取小时属性
60 data.loc[:, "成交时间"] = pd.to_datetime(data.loc[:, "成交时间"])
61 
62 data.loc[:, "hour"] = [i.hour for i in data.loc[:, "成交时间"]]
63 
64 print(data)
65 
66 # (3)按照小时分组,统计每个小时内订单的数量
67 res = data.groupby(by="hour")["订单ID"].count().sort_values(ascending=False)
68 
69 print("res: \n", res)
70 
71 # sort_index() 按照行索引的大小进行排序