[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技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology