Maybe, something like this might work -
import pandas as pd, numpy as np
df = pd.DataFrame({'A':[1,1,1,1,1,2,2,2], \
'B':['Yes', 'Yes', 'Yes', 'Yes', 'No', 'No', 'Yes', 'Yes'], \
'C':[3,1,0.3,4,0.5,0.4,0.2,10]})
df['D'] = np.random.randint(10,20,size=8)
df #Dummy dataframe
A B C D
0 1 Yes 3.0 19
1 1 Yes 1.0 13
2 1 Yes 0.3 16
3 1 Yes 4.0 18
4 1 No 0.5 19
5 2 No 0.4 14
6 2 Yes 0.2 17
7 2 Yes 10.0 15
temp = df[(df['A'] == 1) & (df['B'] == 'Yes')].copy()
temp
A B C D
0 1 Yes 3.0 19
1 1 Yes 1.0 13
2 1 Yes 0.3 16
3 1 Yes 4.0 18
temp['X'] = np.where(temp['C'] >= 1, temp['D'], (1-temp['C'])*temp['D'])
A B C D X
0 1 Yes 3.0 19 19.0
1 1 Yes 1.0 13 13.0
2 1 Yes 0.3 16 11.2
3 1 Yes 4.0 18 18.0
df = df.merge(temp[['X']], left_index=True, right_index=True, how='left')
df
A B C D X
0 1 Yes 3.0 19 19.0
1 1 Yes 1.0 13 13.0
2 1 Yes 0.3 16 11.2
3 1 Yes 4.0 18 18.0
4 1 No 0.5 19 NaN
5 2 No 0.4 14 NaN
6 2 Yes 0.2 17 NaN
7 2 Yes 10.0 15 NaN