pandas se fusionan en columnas con nombres diferentes y evitan duplicados

¿Cómo puedo combinar dos marcos de datos de pandas en dos columnas con nombres diferentes y mantener una de las columnas?

df1 = pd.DataFrame({'UserName': [1,2,3], 'Col1':['a','b','c']}) df2 = pd.DataFrame({'UserID': [1,2,3], 'Col2':['d','e','f']}) pd.merge(df1, df2, left_on='UserName', right_on='UserID') 

Esto proporciona un DataFrame como este

introduzca la descripción de la imagen aquí

Pero claramente me estoy fusionando con UserName y UserID para que sean iguales. Quiero que se vea así. ¿Hay alguna forma limpia de hacer esto?

introduzca la descripción de la imagen aquí

Solo las formas en que puedo pensar son cambiar el nombre de las columnas para que sean las mismas antes de fusionar, o eliminar una de ellas después de fusionar. Sería bueno si los pandas soltaran automáticamente uno de ellos o podría hacer algo como

 pd.merge(df1, df2, left_on='UserName', right_on='UserID', keep_column='left') 

¿Qué tal si configura el UserID como índice y luego únase en el índice para el segundo dataframe?

 pd.merge(df1, df2.set_index('UserID'), left_on='UserName', right_index=True) # Col1 UserName Col2 # 0 a 1 d # 1 b 2 e # 2 c 3 f 

No hay nada realmente bueno en esto: está destinado a mantener las columnas, ya que los casos más grandes como la izquierda derecha o las combinaciones externas aportan información adicional con dos columnas. No intente forzar en exceso su línea de fusión, sea explícito como sugiere

Solución 1:

 df2.columns = ['Col2', 'UserName'] pd.merge(df1, df2,on='UserName') Out[67]: Col1 UserName Col2 0 a 1 d 1 b 2 e 2 c 3 f 

Solución 2:

 pd.merge(df1, df2, left_on='UserName', right_on='UserID').drop('UserID', axis=1) Out[71]: Col1 UserName Col2 0 a 1 d 1 b 2 e 2 c 3 f