あれもPython,これもPython

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

複数のデータフレームを関数ひとつでmergeしたい(再帰を使う)

小ネタです。複数のデータをmergeする必要があり、見通しが悪くなるときに時々使っています。
使用するデータが頻繁に変わる時に、使うデータだけ管理すれば良いので再実行が楽です。 ※concatは複数渡せるのですが、mergeは渡せないため

再帰するマージを定義

def recursive_merge(dfs):
  #最後のdfはdfを返すだけ
  if len(dfs) == 1:
    return dfs[0]

  #再起処理/popで一つだけ取り出し、残りを次の処理へ
  else:
    tmp = dfs.pop()

  return pd.merge(
      recursive_merge(dfs),
      tmp
      )

実際に使う場合

#適当なサンプルデータ
df1 = pd.DataFrame({
    "ctg":['a','b'],
    "val1":[1,1]
})

df2 = pd.DataFrame({
    "ctg":['a','b'],
    "val2":[2,2]
})

df3 = pd.DataFrame({
    "ctg":['a','b'],
    "val3":[3,3]
})


# 使うデータが増えたらここに足す
dfs = [df1,df2,df3]

#結合処理は特に変えず、再実行するだけ
recursive_merge(dfs)