2.1 数据横向关联合并:merge

 

2.1 数据横向关联合并:merge

 

这一节,我们的目标是想把 transaction 数据 transaction_detail 数据 也合并到一起。

和上一节的concat合并(数据列相同)不同,这次的两个数据集合,数据列是不同的。所以,合并时就会有下面的问题:

  1. 是将两个数据集合的数据列全部合并?还是只合并必要的数据列?
  2. 两个数据集合合并的连接点是哪个数据列?

 

带着上面的问题,我们还是回到刘先生的需求:如何让自己的店铺销量越来越好?

  1. 显然从销量的角度,还是以更有利于分析的 transaction_detail 为主,transaction 为辅。也就是说,将 transaction_detail 中的数据列全部合并,而将 transaction 数据 中的部分数据列合并。至于选择哪些数据列,则没有要求,根据你的具体选择而定。这里我们将“payment_date”和“customer_id”合并进来。
  2. 通过观察两个数据集,可以发现共同存在的数据列是“transaction_id”,所以,就以这个数据列作为连接两个数据集的纽带。

代码如下:

join_data = pd.merge(transaction_detail,transaction[["transaction_id","payment_date","customer_id"]],on="transaction_id",how="left")
join_data.head()

解释一下代码:

 

第1行:使用merge函数,将两个数据集合横向连接。

第1个参数:transactionn_detail,表示主数据集合.

第2个参数:transaction,表示副数据集合。"transaction_id","payment_date","customer_id",表示从这个副数据集合中挑选出来的与主数据集合合并的数据列。

第3个参数:on="transaction_id",表示两个数据集合的共同数据列,用这个数据列进行关联合并。

第4个参数:how="left",表示连接方式是“left join”方式。

 

第2行:使用head()函数,将 join_data 变量的前5行显示出来。

 

这里介绍一下数据集合的连接方式,如下图所示。


2.1 数据横向关联合并:merge

关于这4种连接方式的介绍,如下表所示:

连接方式

作用

Inner join

只将两个数据集中,共同的数据部分连接起来。

Outer join

将两个数据全部连接起来。

Right join

将右侧的数据完全连接,左侧数据中,共同的数据部分会连接。

Left join

将左侧的数据完全连接,右侧数据中,共同的数据部分会连接。

 

接下来,点击"运行",执行效果如下图所示。

2.1 数据横向关联合并:merge

从执行结果来看,join_data的数据集合中,已经多出来“payment_date”数据列和“customer_id”数据列。

接下来,我们检验一下join_data的数据量,也就是行数。代码如下:

print(len(transaction_detail))
print(len(transaction))
print(len(join_data))

点击"运行",执行效果如下图所示。

2.1 数据横向关联合并:merge

可以发现,join_data 和 transaction_detail 的数据量都是7144,说明现在是以transaction_detail 为主数据集合。


按照同样的方法,我们再将 join_data和customer_master,item_master,进行left join 连接。

代码如下:

join_data = pd.merge(join_data,customer_master,on="customer_id",how="left")
join_data = pd.merge(join_data,item_master,on="item_id",how="left")
join_data.head()

点击"运行",执行效果如下图所示。

2.1 数据横向关联合并:merge

 

到此,我们就把分散的数据,全部都合并在一起了,接下来就可以分析了!


此处为语雀文档,点击链接查看:https://www.yuque.com/codeclub/yvmeco/friz9v