@@ -270,6 +270,42 @@ column with another DataFrame's index.
270270 indexed_df2 = df2.set_index(" key" )
271271 pd.merge(df1, indexed_df2, left_on = " key" , right_index = True )
272272
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+
273309 LEFT OUTER JOIN
274310~~~~~~~~~~~~~~~
275311
0 commit comments