Я использовал set
для логики "if столбец c в DataFrame1 равен 1 или если столбец d равен 1":
columns = ['id', 'n', 'm', 'c']
df1=pd.DataFrame(
[[577140, 'bla1', 0, 0],
[577140, 'bla2', 0, 0],
[577140, 'bla3', 0, 0],
[577140, 'bla4', 1, 0],
[577140, 'bla5', 0, 1],
[577141, 'bla6', 0, 0],
[577141, 'bla7', 0, 0],
[577141, 'bla8', 1, 0]], columns=columns)
df3 = df1.loc[df1.m == 1, ['id', 'n']]
df3.columns = ['id', 'x']
df2 = pd.DataFrame([[577140, 1], [577141, 0]], columns=['id', 'd'])
id_set = set([df1[df1.c == 1]['id'].values[0], df2[df2.d == 1]['id'].values[0]])
df3['y'] = 0
df3.loc[df3.id.isin(id_set), 'y'] = 1