Mapeo de 2 marcos de datos y reemplazo del encabezado de los valores coincidentes en el dataframe de destino

Tengo un dataframe: df1

SAP_Name SAP_Class SAP_Sec Avi 5 C Rison 6 A Slesh 7 B San 8 C Sud 7 B 

df2:

 Name_Fi Class Avi 5 Rison 6 Slesh 7 

Estoy tratando de hacer coincidir df2 con df1 de tal manera que los valores coincidentes deben tener los encabezados reemplazados igual que df1.

 SAP_Name SAP_Class Ankan 5 Rison 6 Slesh 7 

A continuación se muestra el código que estoy usando:

 d = {} for col2 in df2.columns: for col1 in df1.columns: cond = df2[col2].isin(df1[col1]).all() if cond: d[col2] = col1 df2 = df2.rename(columns=d) print (df2) 

Puedo obtener la salida deseada en un archivo pequeño, sin embargo, Mi archivo real tiene 112444 filas x 446 columnas y el archivo de destino que se va a cambiar tiene 3 filas x 35 columnas, el código se está ejecutando durante mucho tiempo en este caso. ¿Alguien por favor me puede ayudar aquí?

En mi opinión, si el rendimiento es importante, use issubset con set :

 d = {} for col2 in df2.columns: for col1 in df1.columns: cond = set(df2[col2]).issubset(df1[col1]) if cond: d[col2] = col1 df2 = df2.rename(columns=d) print (df2) SAP_Name SAP_Class 0 Avi 5 1 Rison 6 2 Slesh 7 

EDITAR:

 #create dictioanry of Series without dupes dfs1 = {col1: df1[col1].drop_duplicates() for col1 in df1.columns} #print (dfs1) #create dictionary of sets set2 = {col2: set(df2[col2]) for col2 in df2.columns} #print (set2) #loop buy both dictionaries and find columns for rename d = {} for col2, v2 in set2.items(): for col1, v1 in dfs1.items(): cond = v2.issubset(v1) if cond: d[col2] = col1 df2 = df2.rename(columns=d) print (df2) SAP_Name SAP_Class 0 Avi 5 1 Rison 6 2 Slesh 7 

Me gustaría cambiar el nombre de las columnas y utilizar la combinación.

 cols = ['SAP_Name', 'SAP_Class'] df2.set_axis(cols, axis=1, inplace=False).merge(df1[cols]) SAP_Name SAP_Class 0 Avi 5 1 Rison 6 2 Slesh 7