Каким методом создать новый столбец на основе работы функции?
Есть Dataframe:
oil_temp_ph_a ph_a_cur load_a
0 46.400002 256 0.333333
1 46.400002 259 0.337240
2 46.400002 253 0.329427
3 46.299999 245 0.319010
4 46.299999 249 0.324219
Есть функция для расчета значения на основе данных из двух других столбцов:
def shaot(temp, load):
shaot_cons = 0
if temp >= 10:
shaot_cons += 66
if temp >= 20 and load < 0.4:
shaot_cons += 8.8
return (shaot_cons)
Пробовал передавать значения через .assign и через .apply
Например:
data['new'] = df.apply(lambda x: shaot(x.oil_temp_ph_a, x.load_a), axis=1)
Пробовал перебирать строки циклом, но все время вылезают разные ошибки.
Каким методом лучше всего передать два значения из той же строки в функцию и вернуть результат в новый столбец?
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Попробуйте так:
def shaot(s):
shaot_cons = 0
if s["oil_temp_ph_a"] >= 10:
shaot_cons += 66
if s["oil_temp_ph_a"] >= 20 and s["load_a"] < 0.4:
shaot_cons += 8.8
return (shaot_cons)
df["new"] = df.apply(shaot, axis=1)
результат:
In [55]: df
Out[55]:
oil_temp_ph_a ph_a_cur load_a new
0 46.400002 256 0.333333 74.8
1 46.400002 259 0.337240 74.8
2 46.400002 253 0.329427 74.8
3 46.299999 245 0.319010 74.8
4 46.299999 249 0.324219 74.8
Автор решения: CrazyElf
→ Ссылка
Скорее всего достаточно будет вместо
x.oil_temp_ph_a, x.load_a
написать
x['oil_temp_ph_a'], x['load_a']
Дело в том, что такой "синтаксический сахар" в виде полей объекта вместо индексирования работает только на уровне всего датафрейма, а когда вы обращаетесь к строке данных из датафрейма этой магии нет и нужно обращаться к полям более стандартным образом.