天天看點

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