Если вы ищете скорость, она будет быстрее, если не настолько удобочитаемой.Где и если выполняется через логическое индексирование.
Настройка
import pandas as pd
import numpy as np
df = pd.DataFrame({'prod':['a','b','b','a'] ,
'S':[10,20,30,140],
'X':[123,150,140,100]})
print(df)
prod S X
0 a 10 123
1 b 20 150
2 b 30 140
3 a 140 100
Код
# make an array to hold results
results = np.zeros(len(df))
# make arrays from df values
SX_vals = df[['S', 'X']].values
prod = df['prod'].values
# product multiplier dictionary
prod_dict = {'a': .006, 'b': .002}
# make array of S - X
sub_result = np.subtract(SX_vals[:,0], SX_vals[:,1])
# make boolean mask of subtraction results are positive
s_bigger = (sub_result > 0)
# loop through products (keys) of prod_dict
for key in prod_dict.keys():
# mask where (S-X) > 0 and prod == key
mask = s_bigger & (prod == key)
# multiply and insert into result array
results[mask] = sub_result[mask] * prod_dict[key]
# assign result array to dataframe
df['result'] = results
Результат
print(df)
prod S X result
0 a 10 123 0.00
1 b 20 150 0.00
2 b 30 140 0.00
3 a 140 100 0.24