Каким методом создать новый столбец на основе работы функции?

Есть 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']

Дело в том, что такой "синтаксический сахар" в виде полей объекта вместо индексирования работает только на уровне всего датафрейма, а когда вы обращаетесь к строке данных из датафрейма этой магии нет и нужно обращаться к полям более стандартным образом.

→ Ссылка