3.pandas表格的 纵向拼接 与 横向关连

2017-12-17  本文已影响0人  B0ZZ

抛开统计不提,数据整理,说难很难,说简单也很简单。难,多半是因为这事儿着实太耗时;简单,数据整理无非是筛选、逻辑赋值、左右连和内连。
本回,先说左右连和内连。

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','批次','批号','发货数量']]

内连
上一篇 下一篇

猜你喜欢

热点阅读