#はじめに
pandasデータフレームをRのdplyr同様に操作可能にするdfplyライブラリについてまとめるシリーズです。今回は100%中の100%大事なjoin関数です。複数のデータフレームを結合する関数ですね。
関連記事はこちら
dplyr使いのためのpandas dfplyすごい編
dplyrのjoin関数についてはmatsuou1氏が解説している記事が分かりやすいです。
[dplyrを使いこなす!JOIN編]
(https://qiita.com/matsuou1/items/b1bd9778610e3a586e71)
#事前準備、例データ
import pandas as pd
import numpy as np
from dfply import * #dfply読み込み
#例データ
a = pd.DataFrame({
'x1': ['A', 'B', 'C'],
'x2': [1, 2, 3]
})
b = pd.DataFrame({
'x1': ['A', 'B', 'D'],
'x3': [True, False, True]
})
##各種join
dplyrと同様です。
#aとbを結合
a >> inner_join(b, by='x1')
結合キー列(by=指定)は両データフレーム共通でなくてはなりません。
そのためdplyrで可能であった by = c('x1' = 'y1') のような書き方はできません。
#aとaを結合
a >> left_join(a, by='x1')
#同じ列名があると'_x', '_y'がついて分けてくれます。
##各種bind
dplyrと同様です。
###bind_rows 縦結合
a >> bind_rows(b, join='inner')
a >> bind_rows(b) #join='outer' #ignore_index=False
#ignore_indexでindexがリセット
###bind_cols 横結合
#例データ:cを追加
c = pd.DataFrame({
'x1': ['B', 'C', 'D', 'E'],
'x2': [2, 3, 4, 5]
})
#aとcを横結合
a >> bind_cols(c) # join='outer', ignore_index=False)
#ignore_indexでindex(列名)がリセット
単純に結合すると同じ列名があったとしてもjoinのように'_x', '_y'をつけてくれませんし、select()で'x1'を指定しても最初の列しか認識してくれません。
#まとめ
いかがでしたでしょうか。dfplyのjoin関数も今まで紹介した関数同様にdplyrと同じように機能します。dplyr使いには本当に便利ですね。