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 

合并后效果如下:

python3 pandas 实现excel数据分析的 数据分类汇总 按条件求和 以及按条件计数 和excel 赛选,excel指定改列名_第1张图片

事情还没完,这个只是在数据源中匹配合并好了提货门店所属的大区和小区

下面我们据需要根据上面的数据源 进行 对数据的分类汇总 和 计数 以及修改列名。

第一步,修改列名:

为了生成的数据更好理解 所以需要修改列名 。把数据源列名的 订单状态 修改为 订单数量购买数量 修改为 购买件数

代码如下:

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的截图

python3 pandas 实现excel数据分析的 数据分类汇总 按条件求和 以及按条件计数 和excel 赛选,excel指定改列名_第2张图片

下方是门店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

分享就到这里了,可能文字描述逻辑有些不对,还请原谅。

别忘记,如果对你带来启发和灵感,给我点个关注呗。

 

你可能感兴趣的:(python3 pandas 实现excel数据分析的 数据分类汇总 按条件求和 以及按条件计数 和excel 赛选,excel指定改列名)