2.1 数据横向关联合并:merge
这一节,我们的目标是想把 transaction 数据 和 transaction_detail 数据 也合并到一起。
和上一节的concat合并(数据列相同)不同,这次的两个数据集合,数据列是不同的。所以,合并时就会有下面的问题:
- 是将两个数据集合的数据列全部合并?还是只合并必要的数据列?
- 两个数据集合合并的连接点是哪个数据列?
带着上面的问题,我们还是回到刘先生的需求:如何让自己的店铺销量越来越好?
- 显然从销量的角度,还是以更有利于分析的 transaction_detail 为主,transaction 为辅。也就是说,将 transaction_detail 中的数据列全部合并,而将 transaction 数据 中的部分数据列合并。至于选择哪些数据列,则没有要求,根据你的具体选择而定。这里我们将“payment_date”和“customer_id”合并进来。
- 通过观察两个数据集,可以发现共同存在的数据列是“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行显示出来。
这里介绍一下数据集合的连接方式,如下图所示。
关于这4种连接方式的介绍,如下表所示:
连接方式 |
作用 |
Inner join |
只将两个数据集中,共同的数据部分连接起来。 |
Outer join |
将两个数据全部连接起来。 |
Right join |
将右侧的数据完全连接,左侧数据中,共同的数据部分会连接。 |
Left join |
将左侧的数据完全连接,右侧数据中,共同的数据部分会连接。 |
接下来,点击"运行",执行效果如下图所示。
从执行结果来看,join_data的数据集合中,已经多出来“payment_date”数据列和“customer_id”数据列。
接下来,我们检验一下join_data的数据量,也就是行数。代码如下:
print(len(transaction_detail)) print(len(transaction)) print(len(join_data))
点击"运行",执行效果如下图所示。
可以发现,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()
点击"运行",执行效果如下图所示。
到此,我们就把分散的数据,全部都合并在一起了,接下来就可以分析了!
此处为语雀文档,点击链接查看:https://www.yuque.com/codeclub/yvmeco/friz9v