Попробуйте это:
df1=pd.DataFrame({'route_id':['r1','r1','r1'], 'entity_id_1':[1,4,5]})
df2=pd.DataFrame({'route_id':['r1','r1','r1','r1'], 'entity_id_1':[4,7,8,9]})
Предполагая пример данных в приведенном выше кадре данных, попробуйте ниже
target_df = df1.groupby('route_id').apply(lambda x: x.entity_id_1.isin(df2[df2.route_id==x.route_id.values[0]]['entity_id_1']).sum()/len(np.unique(x.entity_id_1.tolist()+df2[df2.route_id==x.route_id.values[0]]['entity_id_1'].tolist()))).reset_index(name='compliance')
Это даст желаемый результат, print(target_df)
:
route_id compliance
0 r1 0.166667