Хитрость заключается в том, что две таблицы имеют разное количество строк, также приведенные выше примеры могут не работать, если в df2 больше категорий, чем в df1.
вот рабочий пример:
df1 = pd.DataFrame([['orange',12],['rose',3],['apple',44],['grapes',1]], columns = ['name', 'age'])
df1
name age
0 orange 12
1 rose 3
2 apple 44
3 grapes 1
df2 = pd.DataFrame([['orange',1],['rose',0],['apple',1],['grapes',1],['daffodils',0],['berries',1]], columns = ['cat', 'Fruit'])
df2
cat Fruit
0 orange 1
1 rose 0
2 apple 1
3 grapes 1
4 daffodils 0
5 berries 1
одной строкой, запустите listcomp с условным оператором и выполните объединенные df1 и df2 на лету, где ключ df1.name = df2.cat:
df1['flag'] = ['Fruit' if i == 1 else 'Flower' for i in df1.merge(df2,how='left',left_on='name', right_on='cat').Fruit]
df1
выход
name age flag
0 orange 12 Fruit
1 rose 3 Flower
2 apple 44 Fruit
3 grapes 1 Fruit