PythonやSQLを使ったデータ分析で必須となるのが複数のデータフレーム(DBの場合テーブル)の結合だ。

例えば、通常の売上管理システムであれば以下のように「売上」と「売上詳細」が別のテーブルとして管理されている。

【売上】※transaction.csv
・売上ID
・顧客ID
・合計金額
・購入日時

u_idcustomer_idpricepayment_date
U000010001210002019-11-01 01:36:57
U00002000290002019-11-02 12:04:03
U000030003180002019-11-02 14:31:28

【売上詳細】※transaction_detail.csv
・売上詳細ID
・売上ID
・商品ID
・注文数

d_idu_iditem_idquantity
D00001U0000100013
D00002U0000200021
D00003U0000300022

今回はこのように分かれているデータを、pandasを使って一つのデータフレームに結合する方法を紹介する。

merge関数の使い方

merge関数の第一引数には主軸とするデータフレームを、第二引数には結合に必要な列を渡す。

今回の場合「transaction」の「price」列は合計金額となるが、「transaction_detail」の「item_id」に紐づいた価格情報と「quantity」で合計金額が算出されるため、ここで「price」列を結合に含めてしまうとデータの重複となり好ましくない。

「on」には結合するキーとなる列名を、「how」には結合方法を指定する。
結合方法にはinner(内部結合)、left(左結合)、right(右結合)、outer(外部結合)を指定することができる。

import pandas as pd

# csvデータをpandasデータフレームに変換
transaction = pd.read_csv('transaction.csv')
transaction_detail = pd.read_csv('transaction_detail.csv')

# マージ関数
join_data = pd.merge(transaction_detail,
    transaction[["u_id", "payment_date", "customer_id"]],
    on="u_id", how="left")

このmerge関数を実行することで、別のcsvファイルで管理されていた売上情報と、売上に付随する詳細情報を結合することができた。