データを結合する際、結合キーとなる列が存在しない場合があります。そのような場合、既存のデータに新しい列を追加して結合キーとして利用することで、適切なデータの結合が可能となり、今回はそのやり方を紹介します。
複数のデータを結合する際に、単一の列だけでは適切な結合ができないケースがあります。一方で、結合元あるいは結合先に結合するためのキーがないときには、結合が可能なようにキー列の作成が必要になることがあります。
今回は、以下の3つのデータを利用します。
注文(オーダー)データ
1行が1つの注文を表し、列には注文日、顧客ID、製品ID、注文数、顧客区分の情報が含まれます。
会員向けの価格テーブル
1行が1つの製品の会員向けの価格を表します。
非会員向けの価格テーブル
1行が1つの製品の非会員向けの価格を表します。
オーダーのデータに、会員向けと非会員向けの価格を結合したいときに、製品IDだけで結合すると、適切な結合ができません。
一方で、それぞれの価格テーブルには、会員の区分の情報がないため、「製品ID」と「顧客区分」で結合することができません。
一方で、それぞれの価格テーブルに以下のよう会員の区分の情報があれば、その「製品ID」と「顧客区分」の情報をもとにそれぞれのテーブルを簡単に結合できます。
そこでまずは、2つの価格テーブルに顧客区分の情報を追加します。
まずは会員向け価格テーブルに移動し、任意の列ヘッダーメニューから「計算を作成」の「標準」を選択します。
計算を作成のダイアログが開いたら、計算エディタに"会員"
と入力し、新しく列を作成にチェックを入れ、列名を「区分」と指定します。
会員向け価格テーブルに顧客区分の列を追加できました。
続いて、非会員向け価格テーブルに移動し、同じ処理を行います。任意の列ヘッダーメニューから「計算を作成」の「標準」を選択します。
計算を作成のダイアログが開いたら、計算エディタに"非会員"
と入力し、新しく列を作成にチェックを入れ、列名を「区分」と指定します。
これで非会員向けの価格テーブルに顧客区分の列を追加できました。
次に注文データに価格の情報を結合していきます。
このとき、価格のデータを結合する2つの方法があるので、ここからはそちらを紹介します。
1つ目の方法はそれぞれの価格テーブルを個別にオーダーのデータに結合して後から1つの列にまとめる方法で、2つ目の方法は、あらかじめ、会員向けと非会員向けの統合した価格データを用意して、オーダーのデータに結合するやり方です。
ここからはそれぞれのやり方を紹介します。
オーダーデータの「製品ID」の列ヘッダーメニューから「結合」を選択します。
結合先のデータフレームで「会員向け価格テーブル」を選択します。
キー列の追加をクリックし、顧客区分と区分を選択します。
プレビューを確認後、実行します。
これで会員向けの価格の情報を追加できました。
続いて非会員向け価格を結合します。
再び、「製品ID」の列ヘッダーメニューから「結合」を選択します。
結合先のデータフレームで「非会員向け価格テーブル」を選択します。
キー列の追加をクリックし、顧客区分と区分を選択し、プレビューを確認後、実行します。
これで2つのタイプの価格を追加できました。
ただしこの時点で、価格は1つの列に統一されていません。そこで、2つに列に分かれている情報を1つにまとめていきます。
任意の列ヘッダーメニューから「欠損値の加工」、「欠損値を別の列の値で埋める」を選択します。
計算を作成ダイアログが開いたら、計算エディタにcoalesce(価格.x, 価格.y)
を指定し、新しく列を作成にチェックをつけ、列名を「価格」に指定して実行します。
これで価格を1つにまとめることができました。(必要に応じて、不要な列は削除してください)
会員向け価格テーブルに移動して、ステップメニューから「マージ」を選択します。(2つのテーブルの列名が異なる場合、あらかじめ列名が同じになるようにしてください)
マージするデータフレームとして「非会員向け価格テーブル」を選択し、データフレーム名を保持のチェックを外し、実行します。
これで、1つのテーブルに会員向けと非会員向けのデータをまとめられました。
最後にオーダーと価格テーブルを結合します。
オーダーデータの「製品ID」の列ヘッダーメニューから「結合」を選択します。
結合先のデータフレームで「会員向け価格テーブル」を選択します。
キー列の追加をクリックし、顧客区分と区分を選択します。
プレビューを確認後、実行します。
これで価格の情報をオーダーのデータに結合できました。