python3pandas实现excel数据分析的数据分类汇总按条件求和
以及按条件计数和e。。。
本⼈是在⼀家零售⾏业⼯作,所出的教程,都是我⽇常⼯作中遇到的 复杂⽽⼤量重复的⼯作 我⽤python代替去完成它,都是原创内容,⾮粘贴复制,如果我的⽂章能够帮助到⼤家,希望帮忙点个关注。当然,如果有很多错别字,也请见谅。
问题来了:
领导总是叫我每天导出来分析,但是我们公司分析数据总是要到 ⼤区和⼩区,因为我们⼤区和⼩区都有负责⼈,KPI考核要对应负责⼈,通过数据去体现问题。这⼀次领导叫我把线上的门店⾃提订单数据导出来做数据分析。
题外话:因为公司对接到第三⽅ERP系统都是以门店为主去对接的,因为我们钱给的少,所以第三⽅数据不⽀持定制化数据分析。只能靠我们⼿⼯⽤excel 去做表。但是如果只是做⼀次,还勉强⽤excel 能做好。如果是天天都需要数据跟进,那天天都需要做数据赛选和匹配。虽然excel 可以做到输⼊好公式,把数据源复制粘贴进去,可以⾃动计算。但是excel 公式多,会⾮常的吃电脑性能,⽽且出现⽆响应等。所以这个时候我们需要利⽤代码去完成这个,我们叫的⾼⼤上的名字 办公⾃动化
先给⼤家看下从ERP导出来的数据源是什么样⼦:
订单状态订单⾦额(实付)下单时间提货门店销售门店
(code)
客服备注商品⾦额总计
订单⽀付已过期0.102019-09-17 10:45:56多多⼀上总部A99990.10订单⽀付已过期0.102019-09-17 17:33:07江南摩尔店A99990.10订单⽀付已过期0.102019-09-17 17:33:59多多⼀上总部A99990.10订单⽀付已过期0.102019-09-17 17:35:04江南摩尔店A99990.10订单⽀付已过期0.102019-09-18 08:24:09江南摩尔店A99990.10订单⽀付已过期0.102019-09-18 08:28:07江南摩尔店A99990.10订单⽀付已过期0.102019-09-18 08:29:25嘉兴平湖店A99990.10订单⽀付已过期0.102019-09-18 08:53:05江南摩尔店A99990.10订单⽀付已过期0.102019-09-18 09:51:24多多⼀上总部A99990.10订单⽀付已过期0.102019-09-18 09:56:04多多⼀上总部A99990.10订单⽀付已过期0.102019-09-18 10:17:22多多⼀上总部A99990.10订单取消0.012019-09-18 10:55:52江南摩尔店A99990.01待备货29.002019-09-23 19:36:06兰溪星⾠店A001229.00待备货29.002019-09-23 19:38:32巫⼭祥云店B020329.00订单⽀付已过期19.002019-09-23 19:38:51全椒新华路A046619.00订单取消29.002019-09-23 19:49:06宣恩解放街A046529.00订单⽀付已过期29.002019-09-23 19:49:12临沂兰⼭店A026529.00待备货29.002019-0
9-23 19:49:34枣庄薛城财富步⾏街A029529.00待备货67.002019-09-23 19:50:12三⽔湾店A010567.00待备货67.002019-09-23 19:50:12三⽔湾店A010567.00待备货67.002019-09-23 19:50:12三⽔湾店A010567.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='提货门店') # 进⾏指定相同值的合并
_excel(r"D:\111\merge.xlsx") #保存为merge.xlsx
合并后效果如下:
事情还没完,这个只是在数据源中匹配合并好了提货门店所属的⼤区和⼩区
下⾯我们据需要根据上⾯的数据源 进⾏ 对数据的分类汇总 和 计数 以及修改列名。
第⼀步,修改列名:
groupby是什么函数为了⽣成的数据更好理解 所以需要修改列名 。把数据源列名的 订单状态 修改为 订单数量,购买数量 修改为 购买件数
代码如下:
rd_merge = pd.read_excel(r"D:\111\merge.xlsx") #读取刚刚合并好的excel
changer =ame(columns={'订单状态':'订单数量','购买数量':'购买件数'}) #修改列名
第⼆步,赛选出不要的数值,这⾥是在excel 中 订单状态 那列除了“已⾃提”,“待备货”,“待⾃提” 且 商品总⾦额 ⼤于0。这⾥主要去除掉不要的数据,⽅便在⽣成的时候,不占⽤太多资源。
代码如下:
df = pd.DataFrame(changer) #讲上⾯改变列名的表格转成 DF
title = ['已⾃提','待备货','待⾃提'] #定义⼀个列表,就是需要选中的列的值
sel_excel = df[(df['订单数量'].isin(title)) & (df["商品⾦额总计"]>1)] #进⾏赛选
第三步,按条件进⾏分类汇总(按条件进⾏求和),进⾏按条件进⾏计数。
这⾥主要根据⾃⼰⼯作业务逻辑去做求和 和 计数 等计算⽅式
代码如下:
province = upby(['⼤区']).agg({'订单数量':'count','商品⾦额总计':'sum','购买件数':'sum'})
to_city = upby(['⼩区']).agg({'订单数量':'count','商品⾦额总计':'sum','购买件数':'sum'})
shop = upby(['门店']).agg({'订单数量':'count','商品⾦额总计':'sum','购买件数':'sum'})
上述代码解释,以⼀⾏代码为例解释,
province = upby(['⼤区']).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格式
<_excel(writer,sheet_name='⼤区') #写⼊到m2.xlsx 的名叫⼤区的sheet中
<_excel(writer,sheet_name='⼩区') #写⼊到m2.xlsx 的名叫⼩区的sheet中
<_excel(writer,sheet_name='门店') #写⼊到m2.xlsx 的名叫门店的sheet中
writer.save() #保存
writer.close() #关闭excel
最后代码执⾏后效果如下:
下⽅是sheet的截图
下⽅是门店sheet中的数据:
门店订单数量商品⾦额总计购买件数
万州五桥上海⼤道3873
万州新城⼀店4964
万州新城⼆店21162
三台⽼西街2582
三⽔湾店52495
上虞青春店41924
东⼤街店3773
东长街店1043111
中江上南街店2382
临沂义堂店31453
下⽅是⼩区sheet中的数据:
⼩区订单数量商品⾦额总计购买件数
安徽⼀区1850818
安徽⼆区1966919
安徽四区2886628
⼭东⼀区54212556
⼭东⼆区40187046
江苏⼀区55191856
江苏三区29121532
浙北⼤区2496925
浙西⼀区61826
浙西⼆区1044810
温州⼤区1793917
下⽅是⼤区sheet中的数据:
⼤区订单数量商品⾦额总计购买件数
北⽅⼤区2439171255
南⽅⼤区57253858
成都⼤区39915550411
湖南⼤区1123848116
贵州⼤区1047487115
重庆⼤区1244419126
分享就到这⾥了,可能⽂字描述逻辑有些不对,还请原谅。
别忘记,如果对你带来启发和灵感,给我点个关注呗。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论