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() 按照行索引的大小进行排序