Recopilación de las uniones más habituales con Python Pandas en una sola entrada. No se realizan equivalencias con SQL join, la intención es tener de forma resumida los códigos para realizar left join, inner join y concatenación de data frames de Pandas. Hay amplia documentación; esto es una síntesis.

Los data frames empleados para ilustrar el ejemplo son:

import pandas as pd
import numpy as np

ejemplo1 = { "variable1": [10, 20, 30, 40],
             "variable2": [100, 200, 300, 400]
}
anio1 = ["2011", "2012", "2013", "2014"]
df1 = pd.DataFrame(ejemplo1, index=anio1)

ejemplo2 = { "variable1": [50, 60, 70, 80],
             "variable3": [5000, 6000, 7000, 8000]
}
anio2 = ["2013", "2014", "2015", "2016"]
df2 = pd.DataFrame(ejemplo2, index=anio2)

Uniones de data frames con índices

La estructura de una join con Pandas es:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)

Left Join

left_join = pd.merge(df1, df2, how='left', left_index=True, right_index=True, sort=True)
left_join

Outer Join

outer_join = pd.merge(df1, df2, how='outer', left_index=True, right_index=True, sort=True)
outer_join

Right Join

right_join = pd.merge(df1, df2, how='right', left_index=True, right_index=True, sort=True)
right_join

Inner Join

inner_join = pd.merge(df1, df2, how='inner', left_index=True, right_index=True, sort=True)
inner_join

Concatenar

Concatenación simple

concatenar = pd.concat([df1, df2])
concatenar

Concatenación inner

concatenar_inner = pd.concat([df1, df2], join="inner")
concatenar_inner

Concatenación outer

concatenar_outer = pd.concat([df1, df2], join="outer")
concatenar_outer

Uniones sin índices

Data frames de ejemplo análogos a los anteriores pero sin usar el año como índice:

df1_ni = df1.reset_index().rename(columns={'index': 'anio'})
df2_ni = df2.reset_index().rename(columns={'index': 'anio'})

Si no tenemos índices, es importante especificar en el on= la variable con la que hacemos la unión de las tablas.

Left, outer, right con campo de unión común

# Ejemplo de Left Join por la columna 'anio'
merge_comun = pd.merge(df1_ni, df2_ni, how='left', on='anio')
merge_comun

Inner join con campo de unión de distinto nombre

# Cambiamos el nombre de la columna en df2 para el ejemplo
df2_ni_alt = df2_ni.rename(columns={'anio': 'year'})

# Inner join especificando left_on y right_on
merge_distinto = pd.merge(df1_ni, df2_ni_alt, how='inner', left_on='anio', right_on='year')
merge_distinto

Uniones más habituales en una sola entrada y en pocas líneas de código. Saludos.