[Python] 列の長さが異なるデータフレームを結合する [merge]

2022年6月9日木曜日

Python

本記事では、列の長さが異なる複数の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が生成されました。

dataframes

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)、
左のデータに合わせて結合、右のデータに合わせて結合の順に表示しています。

merge

まとめ

列の長さが異なる2つのデータフレームを結合する方法をご紹介しました。
日付などを手掛かりにfor文を回そうとしていた人のお役に立てば幸いです。

AIエンジニア向けフリーランスならここがおすすめです

まずは無料会員登録

プロフィール

自分の写真
製造業に勤務する傍ら、日々AIの技術動向を調査しブログにアウトプットしています。 AIに関するご相談やお仕事のご依頼はブログのお問い合わせフォームか以下のアドレスまでお気軽にお問い合わせください。 bhupb13511@yahoo.co.jp

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology