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