prov_data['tkey'] = 1
tender_data['tkey'] = 1
df1 = pd.merge(prov_data, tender_data, how='outer', on='tkey')
df1 = pd.merge(df1, no_match, how='outer', left_on='aprov_id', right_on=
    'prov_id')
df1['dropData'] = df1.apply(lambda x: True if x['tender_id'] == x[
    'atender_id'] else False, axis=1)
df1['dropData'] = df1.apply(lambda x: x['dropData'] == True or not ((x[
    'prov_cat_1'] > 0 and x['ten_cat_1'] > 0 or x['prov_cat_2'] > 0 and x[
    'ten_cat_2'] > 0 or x['prov_cat_3'] > 0 and x['ten_cat_3'] > 0 or x[
    'prov_cat_4'] > 0 and x['ten_cat_4'] > 0) and (x['prov_region_1'] > 0 and
    x['ten_region_1'] > 0 or x['prov_region_2'] > 0 and x['ten_region_2'] >
    0 or x['prov_region_3'] > 0 and x['ten_region_3'] > 0)), axis=1)
df1 = df1[~df1.dropData]
df1 = df1[['aprov_id', 'atender_id', 'prov_cat_1', 'prov_cat_2',
    'prov_cat_3', 'prov_cat_4', 'prov_region_1', 'prov_region_2',
    'prov_region_3', 'ten_cat_1', 'ten_cat_2', 'ten_cat_3',
    'ten_cat_4', 'ten_region_1', 'ten_region_2', 'ten_region_3']
    ].reset_index(drop=True)
print(df1.equals(df))
Попытка объединить DataFrames со многими условиями