抛开统计不提,数据整理,说难很难,说简单也很简单。难,多半是因为这事儿着实太耗时;简单,数据整理无非是筛选、逻辑赋值、左右连和内连。
本回,先说左右连和内连。
0 实验数据
表1:仓库信息表(表名=inv_info)
仓库编号 | 仓库 |
---|---|
7 | 备货仓 |
5 | 华东仓(原零售仓) |
0 | 内部测试仓 |
表2:仓库商品信息表1(表名=sku_detail_1)
仓库编号 | SKU | 批次 | 批号 | 收货数 |
---|---|---|---|---|
7 | 102001 | YQ1HMC | 20190816 | 11 |
5 | 102001 | YQ1HMC | 20190816 | 5 |
7 | 102001 | YQ1HMC | 20190816 | 1 |
... | ... | ... | ... | ... |
表3:仓库商品信息表2(表名=sku_detail_2)
仓库编号 | SKU | 批次 | 批号 | 收货数 |
---|---|---|---|---|
7 | 102104 | dfhg | 20190705 | 1 |
5 | 102105 | CSRE001 | 20190524 | 2 |
7 | 102001 | YQ1HMC | 20190816 | 1 |
... | ... | ... | ... | ... |
import numpy as np
import pandas as pd
inv_info = pd.DataFrame([['7','备货仓'],['5','华东仓(原零售仓)'],['0','内部测试仓']], columns=['仓库编号','仓库'])
sku_detail_1= pd.DataFrame([['7','102001','YQ1HMC','20190816','11'],['5','102001','YQ1HMC','20190816','5'],['7','102001','YQ1HMC','20190816','1'],['5','102002','YQ1HMB','20190815','6'],['5','102005','YQ1HMB','20190816','10'],['7','102101','CSQA002','20180130','1'],['5','102104','CSRF001','20190705','6']], columns=['仓库编号','SKU','批次','批号','发货数量'])
sku_detail_2= pd.DataFrame([['7','102104','dfhg','20190705','1'],['5','102105','CSRE001','20190524','2'],['7','102105','0411A','20190524','1'],['5','102111','CSRF001','20190705','2'],['5','102111','fh22','20190705','1'],['7','102111','dg0h52','20190502','1'],['7','102113','CSRF002','20190705','1'],['5','102114','A','20190618','1'],['7','102114','fh02','20190618','1'],['5','102115','','20190704','1'],['7','102116','YQ2FMA','20190606','6'],['5','102116','YQ2FMA','20190606','7']], columns=['仓库编号','SKU','批次','批号','发货数量'])
1 表格的纵向拼接
两张仓库商品信息表的表结构完全一致。假设数据来自同一仓库不同库位,如果要计算当前商品的库存,必须先将两张表纵向拼接起来,然后统计每个仓库有多少种sku以及每个sku在所有仓库的总库存数。
sku_detail = pd.concat([sku_detail_1, sku_detail_2],names=['仓库编号','SKU','批次','批号','发货数量'])
sku_detail.groupby(['仓库编号']).agg({'SKU':pd.Series.nunique})
sku_detail.groupby(['SKU']).agg({'发货数量':np.sum})
2 表格的横向关连
表格关连有三种方式,分别是左连,右连和内连。此处不解释三者的区别,请直接看数据和结果图。
左连(留意SKU、批次、批号等字段为NaN的部分)
left_join = pd.merge(inv_info, sku_detail, left_on=['仓库编号'], right_on=['仓库编号'], how='left')
left_join [['仓库编号','仓库','SKU','批次','批号','发货数量']]
左连和右连几乎是完全相同的操作,唯一的区别是how='left'与how='right'。
内连(留意'仓库编号'为0的仓库不在结果集中)
inner_join = pd.merge(inv_info, sku_detail, left_on=['仓库编号'], right_on=['仓库编号'], how='inner')
inner_join[['仓库','仓库编号','仓库','SKU','批次','批号','发货数量']]