>>> A = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['x','y','z']) >>> A x y z a 1 2 3 b 4 5 6 c 7 8 9 >>> B = pd.DataFrame([[1,3,5],[7,9,11],[13,15,17]],index=['b','c','d'],columns=['u','v','w']) u v w b 1 3 5 c 7 9 11 d 13 15 17 >>> C = pd.DataFrame([[1,3,5],[2,8,14],[13,15,17]],index=['b','c','d'],columns=['u','y','w']) >>> C u y w b 1 3 5 c 2 8 14 d 13 15 17
DataFrame | 結合するデータフレームを指定します。 |
how |
結合方法を次の中から選択します。
left / right / inner / outer 未指定の場合は“inner”が適用されます。 それぞれについては下記のサンプルを参照ください。 |
on | 2つのデータフレーム内から、指定した列名を探し出し、その中で共通する要素の行を抽出します。 |
left_on
right_on |
#A、Bに共通する列が1列の場合 ********************* >>> A = pd.DataFrame({'x':['a','b','c'],'y':[1,4,7],'z':[2,5,9]}) >>> A x y z 0 a 1 2 1 b 4 5 2 c 7 9 >>> B = pd.DataFrame({'x':['a','b','c'],'u':[1,2,3],'v':[4,5,6]}) >>> B u v x 0 1 4 a 1 2 5 b 2 3 6 c >>> pd.merge(A,B) # A.merge(B)でも同じ結果になります。 x y z u v 0 a 1 2 1 4 1 b 4 5 2 5 2 c 7 9 3 6 #A、Bに共通する列が2列の場合 ********************* >>> A = pd.DataFrame({'x':['a','b','c'],'y':[1,4,7],'z':[2,5,9]}) >>> A x y z 0 a 1 2 1 b 4 5 2 c 7 9 >>> B = pd.DataFrame({'x':['a','b','c'],'y':[1,2,3],'v':[4,5,6]}) >>> B v x y 0 4 a 1 1 5 b 2 2 6 c 3 >>> pd.merge(A,B) # A.merge(B)でも同じ結果になります。 x y z v 0 a 1 2 4 #A,Bを結合する際、共通する2列のうち同じ要素を含む行を出力します。
>>> A x y z 0 a 1 2 1 b 4 5 2 c 7 9 >>> B v x y 0 4 a 1 1 5 b 2 2 6 c 3 >>> pd.merge(A,B,on='x') # A.merge(B,on='x')でも同じ結果になります。 x y_x z v y_y 0 a 1 2 4 1 1 b 4 5 5 2 2 c 7 9 6 3
>>> A = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['x','y','z']) >>> A x y z a 1 2 3 b 4 5 6 c 7 8 9 >>> B = pd.DataFrame([[1,3,5],[2,8,14],[13,15,17]],index=['b','c','d'],columns=['u','y','w']) >>> B u y w b 1 3 5 c 2 8 14 d 13 15 17 #AとCに共通な'y'列のうち、AとCの共通要素を含む行を抽出します。 >>> pd.merge(A,C) #A.merge(C)でも結果は同じです。 x y z u w 0 7 8 9 2 14
#AとCに共通な'y'列のうち、AとCの共通要素を含む行を抽出します。 >>> A.merge(C,on='y') x y z u w 0 7 8 9 2 14
#Aの'x'列とBの'u'列を比較して、共通要素のある行を抽出します。 >>> A.merge(B,left_on='x',right_on='u') x y z u v w 0 1 2 3 1 3 5 1 7 8 9 7 9 11 #Aの'z'列とBの'v'列を比較して、共通要素のある行を抽出します。 >>> A.merge(B,left_on='z',right_on='v') x y z u v w 0 1 2 3 1 3 5 1 7 8 9 7 9 11 #Aの'z'列とBの'w'列を比較したが、共通要素がない場合になります。 >>> A.merge(B,left_on='z',right_on='w') Empty DataFrame Columns: [x, y, z, u, v, w] Index: []
DataFrame | 結合するデータフレームを指定します。 |
how |
結合方法を次の中から選択します。
left / right / inner / outer 未指定の場合は“left”が適用されます。 それぞれについては下記のサンプルを参照ください。 |
>>> A.join(B) x y z u v w a 1 2 3 NaN NaN NaN b 4 5 6 1.0 3.0 5.0 c 7 8 9 7.0 9.0 11.0
#how=leftのとき ********************************** #Aのindex(行)ラベルと一致するBの行を結合します。 #BにAのindexラベルと一致しない行がある場合は'NaN'が入ります。 #(今回の例ではBの'd'行は結合されません) >>> A.join(B,how='left') # → A.join(B)と同じ結果になります x y z u v w a 1 2 3 NaN NaN NaN b 4 5 6 1.0 3.0 5.0 c 7 8 9 7.0 9.0 11.0 #how=rightのとき ********************************* #Bのindex(行)ラベルと一致するAの行を結合します。 #AにBのindexラベルと一致しない行がある場合は'NaN'が入ります。 #(今回の例ではAの'a'行は結合されません) >>> A.join(B,how='right') x y z u v w b 4.0 5.0 6.0 1 3 5 c 7.0 8.0 9.0 7 9 11 d NaN NaN NaN 13 15 17 #how=innerのとき ********************************* #AとBのindex(行)ラベルが一致するものどうしを結合します。 #(今回の例では'a'、'd'行が結合されません) >>> A.join(B,how='inner') x y z u v w b 4 5 6 1 3 5 c 7 8 9 7 9 11 #how=outerのとき ********************************* #AとBすべてのindex(行)分を結合します。 #A,Bそれぞれに一致しない行がある場合は'NaN'が入ります。 >>> A.join(B,how='outer') x y z u v w a 1.0 2.0 3.0 NaN NaN NaN b 4.0 5.0 6.0 1.0 3.0 5.0 c 7.0 8.0 9.0 7.0 9.0 11.0 d NaN NaN NaN 13.0 15.0 17.0