import pandas as pd
import numpy as np
df1=pd.DataFrame(data=[[39000, 'Санкт-Петербург', '5 мая 02:08', 123545],
[38990, 'Санкт-Петербург', '4 мая 15:54', 9999991],
[25000, 'Новосибирск', '4 мая 17:29', 4577441],
[47990, 'Москва', '4 мая 14:04', 1245366]],
columns=['Цена', 'Город', 'Дата', 'id'])
df2=pd.DataFrame(data=[[20000, 'Красноярск', '1 мая 10:01', 953314],
[38990, 'Санкт-Петербург', '4 мая 15:54', 9999991],
[25000, 'Новосибирск', '4 мая 17:29', 4577441],
[10000, 'Санкт-Петербург', '5 мая 02:08', 123545],
[43990, 'Москва', '4 мая 14:04', 1245366],
[52000, 'Омск', '3 мая 14:10', 543642]],
columns=['Цена', 'Город', 'Дата', 'id'])
df3 = df1.merge(df2, how='outer', on='id', suffixes=('_df1', '_df2'))
idx = np.where(df3['Цена_df1'] == df3['Цена_df2'], True, False)
df3.loc[idx, 'Цена_df2'] = np.nan
idx1=df3.Город_df1.isna()
idx2=df3.Дата_df1.isna()
for i in range(len(df3)): #Перенос Города и Даты в столбцы с df1 в df3 должна остаться только новая цена
if idx1[i] == True:
df3.loc[i,'Город_df1'] = df3.loc[i, 'Город_df2']
if idx2 [i] == True:
df3.loc[i, 'Дата_df1'] = df3.loc[i, 'Дата_df2']
df3.drop(['Город_df2','Дата_df2'], axis='columns', inplace=True) #удаляем не нужные столбцы