Другой подход, использующий понимание списка:
df['merge_value'] = ['{}({}, {:0}%)'.format(x, y, int(z)) for x, y, z in
df[['category', 'value', 'percentage_difference']].values]
[вне]
category value percentage_difference merge_value
0 Cosmetics 789.99 300.0 Cosmetics(789.99, 300%)
1 Fruits 27.68 400.0 Fruits(27.68, 400%)
2 Clothes 179.20 500.0 Clothes(179.2, 500%)