Вставить столбец в DataFrame с формулой на основе значений из других столбцов
Есть DataFrame, допустим, вот такой:
ID ead recovery
1 10 15
2 20 15
3 30 40
4 0 12
5 nan nan
В реальном DataFrame 80 тыс. строк.
Необходимо добавить столбец "new", в который вносится формула: max(df.ead - df.recovery, 0), а также столбец "new1" с формулой scalar * min(df.ead, df.recovery) / df.ead, где scalar=0.03 чтобы получился следующий результат:
ID ead recovery new new1
1 10 15 0 0.03
2 20 15 5 0.0225
3 30 40 0 0.03
4 0 12 0 0
5 nan nan nan nan
Нашел на просторах следующий вариант:
def foo(ead, recovery):
return max(ead - recovery, 0)
def foo1(ead, recovery):
return 0 if ead==0 or ead==np.nan else 0.03 * min(ead,recovery) / ead
df['new'] = df.apply(lambda x: foo(x.ead, x.recovery), axis=1)
df['new1'] = df.apply(lambda x: foo1(x.ead, x.recovery), axis=1)
Результата достигаю, но время исполнения кода за счет вычисления этого столбца значительно увеличивается. Предполагаю, что сам по себе вариант с .apply() не сильно оптимален.
Может быть, есть варианты как-то по другому добавить вычисляемый столбец на основе условия?
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
>>> df
ID ead recovery new
0 1 10.0 15 0
1 2 20.0 15 5
2 3 30.0 40 0
3 5 0.0 25 0
4 4 NaN 25 0
>>> (0.03 * df[['ead','recovery']].min(1) / df.ead).fillna(0)
0 0.0300
1 0.0225
2 0.0300
3 0.0000
4 0.0000
dtype: float64