tid = tender_data.values[:, (0)]
pid = prov_data.values[:, (0)]
pc = prov_data.values[:, 1:5]
tc = tender_data.values[:, 1:5]
pr = prov_data.values[:, 5:]
tr = tender_data.values[:, 5:]
nm = no_match.groupby(['prov_id', 'tender_id']).size().unstack()
nm = nm.reindex_axis(tid, 1).reindex_axis(pid, 0)
nm = ~nm.fillna(0).astype(bool).values * 1
a = pd.DataFrame(pc.dot(tc.T) * pr.dot(tr.T) * nm > 0, pid, tid)
a = a.mask(~a).stack().index
fp = a.get_level_values(0)
ft = a.get_level_values(1)
Попытка объединить DataFrames со многими условиями