Попробуйте исправить свой код, PS: вы забыли добавить axis=1
df.apply(lambda x: fun(x['A'],1) if x['decide'] else fun(x['A'],2),axis=1)
Out[560]:
0 2
1 4
dtype: int64
Также при использовании np.where
вы все равно можете передавать свои собственные определенные функции
np.where(df.decide,fun(df.A,1),fun(df.A,2))
Если ваша логика так же проста, как вы показываете нам в своей функции примера
df.A+2-df.decide
Out[563]:
0 2
1 4
dtype: int64