python3 pandas 實現excel數據分析的 數據分類彙總 按條件求和 以及按條件計數 和excel 賽選,excel指定改列名

本人是在一家零售行業工作,所出的教程,都是我日常工作中遇到的 複雜而大量重複的工作 我用python代替去完成它,都是原創內容,非粘貼複製,如果我的文章能夠幫助到大家,希望幫忙點個關注。當然,如果有很多錯別字,也請見諒。

問題來了:

領導總是叫我每天導出來分析,但是我們公司分析數據總是要到 大區和小區,因爲我們大區和小區都有負責人,KPI考覈要對應負責人,通過數據去體現問題。這一次領導叫我把線上的門店自提訂單數據導出來做數據分析。

題外話:因爲公司對接到第三方ERP系統都是以門店爲主去對接的,因爲我們錢給的少,所以第三方數據不支持定製化數據分析。只能靠我們手工用excel 去做表。但是如果只是做一次,還勉強用excel 能做好。如果是天天都需要數據跟進,那天天都需要做數據賽選和匹配。雖然excel 可以做到輸入好公式,把數據源複製粘貼進去,可以自動計算。但是excel 公式多,會非常的喫電腦性能,而且出現無響應等。所以這個時候我們需要利用代碼去完成這個,我們叫的高大上的名字 辦公自動化

先給大家看下從ERP導出來的數據源是什麼樣子:

訂單狀態 訂單金額(實付) 下單時間 提貨門店 銷售門店(code) 客服備註 商品金額總計
訂單支付已過期 0.10 2019-09-17 10:45:56 多多一上總部 A9999   0.10
訂單支付已過期 0.10 2019-09-17 17:33:07 江南摩爾店 A9999   0.10
訂單支付已過期 0.10 2019-09-17 17:33:59 多多一上總部 A9999   0.10
訂單支付已過期 0.10 2019-09-17 17:35:04 江南摩爾店 A9999   0.10
訂單支付已過期 0.10 2019-09-18 08:24:09 江南摩爾店 A9999   0.10
訂單支付已過期 0.10 2019-09-18 08:28:07 江南摩爾店 A9999   0.10
訂單支付已過期 0.10 2019-09-18 08:29:25 嘉興平湖店 A9999   0.10
訂單支付已過期 0.10 2019-09-18 08:53:05 江南摩爾店 A9999   0.10
訂單支付已過期 0.10 2019-09-18 09:51:24 多多一上總部 A9999   0.10
訂單支付已過期 0.10 2019-09-18 09:56:04 多多一上總部 A9999   0.10
訂單支付已過期 0.10 2019-09-18 10:17:22 多多一上總部 A9999   0.10
訂單取消 0.01 2019-09-18 10:55:52 江南摩爾店 A9999   0.01
待備貨 29.00 2019-09-23 19:36:06 蘭溪星辰店 A0012   29.00
待備貨 29.00 2019-09-23 19:38:32 巫山祥雲店 B0203   29.00
訂單支付已過期 19.00 2019-09-23 19:38:51 全椒新華路 A0466   19.00
訂單取消 29.00 2019-09-23 19:49:06 宣恩解放街 A0465   29.00
訂單支付已過期 29.00 2019-09-23 19:49:12 臨沂蘭山店 A0265   29.00
待備貨 29.00 2019-09-23 19:49:34 棗莊薛城財富步行街 A0295   29.00
待備貨 67.00 2019-09-23 19:50:12 三水灣店 A0105   67.00
待備貨 67.00 2019-09-23 19:50:12 三水灣店 A0105   67.00
待備貨 67.00 2019-09-23 19:50:12 三水灣店 A0105   67.00

在數據合併前需要準備一個帶有大區,小區 ,門店 的表去根據 “提貨門店” 和 下方 的 “門店” 合併 如下表:我看到數據後先做的是 python 的 merge 數據合併,這裏合併就是excel 函數的vlookup 是一樣的基本功能,如果要區別的,我覺得merge 還是要強大。

大區 小區 門店
南方大區 溫州大區 溫州楠江店
南方大區 溫州大區 溫州新橋店
南方大區 溫州大區 溫州狀元店
南方大區 溫州大區 溫州浦西店
南方大區 溫州大區 溫州北白象新店
南方大區 溫州大區 路橋金清店
南方大區 溫州大區 溫嶺松門店
南方大區 溫州大區 溫州蟠鳳商業街
南方大區 溫州大區 區域合計
北方大區 江蘇一區 淮安幸福店
北方大區 江蘇一區 漕運廣場店
北方大區 江蘇一區 東長街店
北方大區 江蘇一區 淮安盱眙店
北方大區 江蘇一區 阜寧阜師路
北方大區 江蘇一區 淮安匯通店
北方大區 江蘇一區 東大街店
北方大區 江蘇一區 少年宮店

代碼如下:

#encoding:utf-8
import pandas as pd #導入pandas包
rd_excel1 = pd.read_excel(r"D:\111\Book1.xlsx") #讀取具有大區,小區,門店的表
rd_excel2 = pd.read_excel(r"D:\111\12049_2019092810070530368495.xls") #讀取數據源表
merge_excel = pd.merge(rd_excel1,rd_excel2,left_on='門店',right_on='提貨門店') # 進行指定相同值的合併
merge_excel.to_excel(r"D:\111\merge.xlsx") #保存爲merge.xlsx 

合併後效果如下:

事情還沒完,這個只是在數據源中匹配合並好了提貨門店所屬的大區和小區

下面我們據需要根據上面的數據源 進行 對數據的分類彙總 和 計數 以及修改列名。

第一步,修改列名:

爲了生成的數據更好理解 所以需要修改列名 。把數據源列名的 訂單狀態 修改爲 訂單數量購買數量 修改爲 購買件數

代碼如下:

rd_merge = pd.read_excel(r"D:\111\merge.xlsx") #讀取剛剛合併好的excel
changer =rd_merge.rename(columns={'訂單狀態':'訂單數量','購買數量':'購買件數'}) #修改列名

第二步,賽選出不要的數值,這裏是在excel 中 訂單狀態 那列除了“已自提”,“待備貨”,“待自提” 且 商品總金額  大於0。

這裏主要去除掉不要的數據,方便在生成的時候,不佔用太多資源。

代碼如下:

df = pd.DataFrame(changer) #講上面改變列名的表格轉成 DF
title = ['已自提','待備貨','待自提'] #定義一個列表,就是需要選中的列的值
sel_excel = df[(df['訂單數量'].isin(title)) & (df["商品金額總計"]>1)] #進行賽選

第三步,按條件進行分類彙總(按條件進行求和),進行按條件進行計數。

這裏主要根據自己工作業務邏輯去做求和 和 計數 等計算方式

代碼如下:

province = sel_excel.groupby(['大區']).agg({'訂單數量':'count','商品金額總計':'sum','購買件數':'sum'})
to_city = sel_excel.groupby(['小區']).agg({'訂單數量':'count','商品金額總計':'sum','購買件數':'sum'})
shop = sel_excel.groupby(['門店']).agg({'訂單數量':'count','商品金額總計':'sum','購買件數':'sum'})

上述代碼解釋,以一行代碼爲例解釋,

province = sel_excel.groupby(['大區']).agg({'訂單數量':'count','商品金額總計':'sum','購買件數':'sum'})

按照上面“進行賽選” 後得出的數據進行 分組統計,也就是 groupby函數,然後集合agg函數,網上說agg 功能主要是提供基於列的聚合操作。在 groupby()中的值 就是要計算的條件。而後面的出 在訂單數量【前名字爲訂單狀態】爲計數,商品金額總計爲求和,購買件數 爲 求和 都是計算方式。

第四步,新建表格,將上面 大區,小區,門店,寫入到excel 不同sheet中。

代碼如下:

writer = pd.ExcelWriter(r"D:\111\m2.xlsx") #新建 m2.xlsx 表
sheet1 = pd.DataFrame(province) #進行轉成DF格式
sheet2 = pd.DataFrame(to_city) #進行轉成DF格式
sheet3 = pd.DataFrame(shop) #進行轉成DF格式

sheet1.to_excel(writer,sheet_name='大區') #寫入到m2.xlsx 的名叫 大區的sheet中
sheet2.to_excel(writer,sheet_name='小區') #寫入到m2.xlsx 的名叫 小區的sheet中
sheet3.to_excel(writer,sheet_name='門店') #寫入到m2.xlsx 的名叫 門店的sheet中
writer.save() #保存
writer.close() #關閉excel

最後代碼執行後效果如下:

下方是sheet的截圖

下方是門店sheet中的數據:

 

門店 訂單數量 商品金額總計 購買件數
萬州五橋上海大道 3 87 3
萬州新城一店 4 96 4
萬州新城二店 2 116 2
三臺老西街 2 58 2
三水灣店 5 249 5
上虞青春店 4 192 4
東大街店 3 77 3
東長街店 10 431 11
中江上南街店 2 38 2
臨沂義堂店 3 145 3

下方是小區sheet中的數據:

小區 訂單數量 商品金額總計 購買件數
安徽一區 18 508 18
安徽二區 19 669 19
安徽四區 28 866 28
山東一區 54 2125 56
山東二區 40 1870 46
江蘇一區 55 1918 56
江蘇三區 29 1215 32
浙北大區 24 969 25
浙西一區 6 182 6
浙西二區 10 448 10
溫州大區 17 939 17

下方是大區sheet中的數據:

大區 訂單數量 商品金額總計 購買件數
北方大區 243 9171 255
南方大區 57 2538 58
成都大區 399 15550 411
湖南大區 112 3848 116
貴州大區 104 7487 115
重慶大區 124 4419 126

分享就到這裏了,可能文字描述邏輯有些不對,還請原諒。

別忘記,如果對你帶來啓發和靈感,給我點個關注唄。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章