本記事では、列の長さが異なる複数のDataFrameの結合方法をご紹介します。
結論
pandasのmergeを使用して特定の列をキーに結合することが可能です。
以下サンプルコードです。
本題から逸れますが、見やすさのためdataframeを横並びに表示するためのクラスを定義します。
# 複数のdataframeを横並びに表示
class HorizontalDisplay:
def __init__(self, *args):
self.args = args
def _repr_html_(self):
template = '<div style="float: left; padding: 10px;">{0}</div>'
return "\n".join(template.format(arg._repr_html_()) for arg in self.args)
長さの異なる2つのdataframeを定義します。
import datetime
import pandas as pd
# dataframe a, b生成
a_len = 6
a_index = [datetime.datetime(2022, 6, 8) + datetime.timedelta(days=i) for i in range(a_len)]
a = pd.DataFrame({'date':a_index, 'a':list(range(a_len))})
b_len = 5
b_index = [datetime.datetime(2022, 6, 10) + datetime.timedelta(days=i) for i in range(b_len)]
b = pd.DataFrame({'date':b_index, 'b':list(range(10, 10+b_len, 1))})
HorizontalDisplay(a,b)
出力結果は以下の通りです。
長さの異なるデータフレームa, bが生成されました。
2つのdataframeを結合していきます。
date列をキーに日付が一致するように結合します。
# date列をキーに結合
inner_merge = pd.merge(a, b, on='date', how='inner')
outer_merge = pd.merge(a, b, on='date', how='outer')
left_merge = pd.merge(a, b, how='left')
rigth_merge = pd.merge(a, b, how='right')
HorizontalDisplay(inner_merge, outer_merge, left_merge, rigth_merge)
左から内部結合(共通部分のみ)、外部結合(どちらかがデータを持たない場合はNan)、
左のデータに合わせて結合、右のデータに合わせて結合の順に表示しています。
まとめ
列の長さが異なる2つのデータフレームを結合する方法をご紹介しました。
日付などを手掛かりにfor文を回そうとしていた人のお役に立てば幸いです。
0 件のコメント :
コメントを投稿