@@ -270,6 +270,42 @@ column with another DataFrame's index.
270
270
indexed_df2 = df2.set_index(" key" )
271
271
pd.merge(df1, indexed_df2, left_on = " key" , right_index = True )
272
272
273
+ :meth: `~pandas.merge ` also supports joining on multiple columns by passing a list of column names.
274
+
275
+ .. code-block :: sql
276
+
277
+ SELECT *
278
+ FROM df1_multi
279
+ INNER JOIN df2_multi
280
+ ON df1_multi.key1 = df2_multi.key1
281
+ AND df1_multi.key2 = df2_multi.key2;
282
+
283
+ .. ipython :: python
284
+
285
+ df1_multi = pd.DataFrame({
286
+ " key1" : [" A" , " B" , " C" , " D" ],
287
+ " key2" : [1 , 2 , 3 , 4 ],
288
+ " value" : np.random.randn(4 )
289
+ })
290
+ df2_multi = pd.DataFrame({
291
+ " key1" : [" B" , " D" , " D" , " E" ],
292
+ " key2" : [2 , 4 , 4 , 5 ],
293
+ " value" : np.random.randn(4 )
294
+ })
295
+ pd.merge(df1_multi, df2_multi, on = [" key1" , " key2" ])
296
+
297
+ If the columns have different names between DataFrames, on can be replaced with left_on and
298
+ right_on.
299
+
300
+ .. ipython :: python
301
+
302
+ df2_multi = pd.DataFrame({
303
+ " key_1" : [" B" , " D" , " D" , " E" ],
304
+ " key_2" : [2 , 4 , 4 , 5 ],
305
+ " value" : np.random.randn(4 )
306
+ })
307
+ pd.merge(df1_multi, df2_multi, left_on = [" key1" , " key2" ], right_on = [" key_1" , " key_2" ])
308
+
273
309
LEFT OUTER JOIN
274
310
~~~~~~~~~~~~~~~
275
311
0 commit comments