あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

Pandasでcross joinを行いたい

SQLでデータを用意する際、cross joinを用いて欠損がないデータセットをつくり、
そこに情報をleft outer joinしていくことがあります。

Pandasでも同様の処理をしたいと思い、ドキュメントをみたのですが、
Pandasのmerge(SQLのjoin)のhowはleft,right,outer,innerしか指定できません。

そこで、以下のような方法で擬似的にcross joinを行います。

import pandas as pd

#日付データ
date_value = pd.DataFrame(
    {
        'cdr':pd.date_range(start='2020-01-02',end='2020-01-31'),
        #クロスジョイン用のキー
        'crossjoinkey':1
    }
)

#idデータ
pk_value = pd.DataFrame(
    {
        'id':['id1','id2','id3'],
        #クロスジョイン用のキー
        'crossjoinkey':1
    }
)

#outer joinだがキーが全て一緒なのでクロスジョインになる
pd.merge(date_value,pk_value,how='outer')

これで、無事日付かけるidの粒度のデータが作れました。