Создание нового столбца через функцию в pandas DataFrame

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам нужно быстро добавить новый столбец в pandas, применяя функцию к значениям других столбцов, можно использовать комбинацию apply и lambda. Например:

Python
Скопировать код
df['new_col'] = df.apply(lambda x: my_func(x['col1'], x['col2']), axis=1)

Здесь my_func – это ваша функция, а col1 и col2 – столбцы, содержащиеся в DataFrame. Эта строка кода создаст новый столбец new_col, состоящий из результатов применения функции my_func.

Кинга Идем в IT: пошаговый план для смены профессии

Операции поэлементного преобразования

Для выполнения поэлементных операций необязательно строить сложные конструкции. Достаточно использовать простые математические операции:

Python
Скопировать код
df['new_col'] = df['col1'] * df['col2']  # Пример умножения

Высокая производительность благодаря векторизации в numpy

Векторизация функций с помощью numpy позволяет значительно повысить производительность. Ваша функция становится мощным стремительным стрелом:

Python
Скопировать код
import numpy as np

np_func = np.vectorize(my_func)  # Векторизация ускоряет обработку
df['new_col'] = np_func(df['col1'], df['col2'])

Для поэлементного умножения можно воспользоваться функцией multiply из numpy:

Python
Скопировать код
df['new_col'] = np.multiply(df['col1'], df['col2'])  # Быстрое умножение

Работа с функциями, возвращающими несколько значений

В случае, когда функция возвращает несколько значений, можно получить их одновременно:

Python
Скопировать код
df['new_col1'], df['new_col2'] = zip(*df.apply(lambda x: my_multi_value_func(x['col1'], x['col2']), axis=1))

Применение функций по строкам с использованием apply

Не забывайте, что для применения функций по строкам следует установить параметр axis=1:

Python
Скопировать код
df['new_col'] = df.apply(lambda x: my_func(x["col1"], x["col2"]), axis=1)

Визуализация

Представим, что вы – повар, собирающийся приготовить изысканное блюдо из выбранных ингредиентов:

(🥕🧅🧄): [Морковь, Лук, Чеснок]

Ваша задача заключается в приготовлении необыкновенного соуса, комбинируя эти ингредиенты:

Python
Скопировать код
def make_special_sauce(ingredient1, ingredient2, ingredient3):
    # Здесь зарождается ваше кулинарное искусство

Аналогично, в pandas вы можете создать новый столбец, используя функцию, которая работает с несколькими значениями:

🥘 DataFrame (до):
| Морковь | Лук | Чеснок |

👩‍🍳 Применение make_special_sauce:

🥘 DataFrame (после):
| Морковь | Лук | Чеснок | Особый соус |_|  # Блюдо готово

Столбец 'Особый соус' создан на основе уникальных ингредиентов каждой строки.

Пользовательские функции для сложной логики

Для реализации сложной логики стоит использовать пользовательские функции в сочетании с apply:

Python
Скопировать код
def custom_logic(row):  
    # Развертывание сложной логики
    return result

df['new_col'] = df.apply(lambda x: custom_logic(x), axis=1)

Создание нескольких новых столбцов за одну итерацию

Если функция возвращает несколько значений и вы хотите сохранить их в отдельных столбцах:

Python
Скопировать код
def get_multiple_metrics(row):  
    # Функция возвращает кортеж значений
    return metric1, metric2

df[['metric1', 'metric2']] = df.apply(lambda x: get_multiple_metrics(x), axis=1, result_type='expand')  # Мультизадачность в действии!

Учет разнообразия данных при применении функций

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

Полезные материалы

  1. pandas.DataFrame.apply — документация pandas 2.2.0: основной источник информации по apply().
  2. python – Pandas: создание двух новых столбцов в dataframe с значениями, вычисленными из существующего столбца – Stack Overflow: обсуждение практического применения apply.
  3. pandas.DataFrame.iterrows — документация pandas 2.2.0: для тех, кто ищет способ обхода строк.
  4. Работа с текстовыми данными — документация pandas 2.2.0: справочник по работе с текстовыми данными в pandas.
  5. Основные функции, которые стоит знать — документация pandas 2.2.0: досье по основным функциям.
  6. numpy.vectorize — Руководство NumPy v1.26: для тех, кто готов перейти на новый уровень с векторизацией.
  7. Использование pandas и Python для анализа вашего набора данных – Real Python: руководство с примерами использования apply и lambda.