Применение функции к фрейму данных с использованием его столбцов в качестве параметров

#python #function #dataframe

#python #функция #фрейм данных

Вопрос:

Мне нужно использовать функцию для вычисления нового столбца для таблицы, используя существующие данные из ее 4 столбцов.

Предположим, у меня есть функция, которая вычисляет заказы, показы или клики — любые данные из разных источников. Что-то вроде этого:

 def claculate_new_columns(complete_orders_a, total_a, completed_orders_b, total_b):
    total = 0.0

    #just some random calculations bellow - not important

    source_a = complete_dorders_a   1
    test_a = total_a    1
    source_b = completed_orders_b   1
    test_b = total_b   1

    for i in something(smth):
        total  = source_a*test_a*source_b*test_b
    return total 
 

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

Я хочу пробежаться по строкам в столбцах и вставить результаты в новый столбец. Что-то вроде этого (очевидно, это не работает):

 old_df['new_column'] = old_df.apply(claculate_new_columns(column1,column2,column3,column4))
 

Был бы рад правильному способу применения таких функций к фрейму данных и использования этих столбцов фрейма данных в качестве аргументов функции. Каков правильный синтаксис?

Решения из StackOverflow не работают для меня, вероятно, потому, что я искал неправильные ответы.

Ответ №1:

Используйте лямбда-функцию:

 old_df['new_column'] = old_df.apply(lambda row: claculate_new_columns(row['column1'], row['column2'], row['column3'], row['column4']), axis=1)
 

Ответ №2:

Для выполнения вычислений между столбцами и создания нового столбца внутри функции используйте apply с axis = 1

Например:

 df = pd.DataFrame({'column_1':[1,2,3,4,5], 
                   'column_2':[10,20,30,40,50]})

def func(df):
    #     All Calculations here
    df['new_column'] = df['column_1']   df['column_2']
    return df

df.apply(func, axis=1)
 

Результаты

     column_1    column_2    new_column
 0      1         10            11
 1      2         20            22
 2      3         30            33
 3      4         40            44
 4      5         50            55