這一節,我們的目标是想把 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