Сообщить об ошибке.

Метод DataFrame.assign() модуля pandas в Python

Создание новых столбцов в исходном DataFrame

Синтаксис:

DataFrame.assign(**kwargs)

Параметры:

  • **kwargs - принимает словарь, ключ которого - это имя нового столбца, а значение может быть вызываемым объектом, Series, массивом или скаляром. Другими словами - имена столбцов являются ключевыми аргументами.

    Если значения являются вызываемым объектом, то они вычисляются и присваиваются новым столбцам. Вызываемый объект не должен изменять входной DataFrame (хотя pandas это не проверяет).

    Если значения не являются вызываемыми (например, Series, скаляр или массив), то они просто назначаются.

Возвращаемое значение:

  • DataFrame с новыми столбцами.

Описание:

Метод DataFrame.assign() модуля pandas создает новые столбцы в исходном DataFrame. Возвращает новый объект со всеми исходными столбцами в дополнение к новым.

Если новый столбец имеет одинаковое имя/название с существующим в исходном DataFrame, то существующие столбцы будут перезаписаны.

Важно! Возможно назначение нескольких столбцов одним методом DataFrame.assign(). Более поздние элементы в **kwargs могут использовать вновь созданные или измененные столбцы в DataFrame. То есть новые элементы вычисляются и назначаются в DataFrame по порядку. (Для понимания о чем речь, смотрите последний пример.)

Примеры использования метода DataFrame.assign()

>>> import pandas as pd
>>> df = pd.DataFrame({'temp_c': [17.0, 25.0]},
...                   index=['Portland', 'Berkeley'])
>>> df
#           temp_c
# Portland    17.0
# Berkeley    25.0

Если значение является вызываемым объектом:

>>> df.assign(temp_f=lambda x: x.temp_c * 9 / 5 + 32)
#           temp_c  temp_f
# Portland    17.0    62.6
# Berkeley    25.0    77.0

Альтернативно, того же поведения можно добиться, напрямую ссылаясь на существующую серию или последовательность:

>>> df.assign(temp_f=df['temp_c'] * 9 / 5 + 32)
#           temp_c  temp_f
# Portland    17.0    62.6
# Berkeley    25.0    77.0

Можно создать несколько столбцов одним методом DataFrame.assign(), при этом один создаваемый столбец может зависеть от другого, определенного в тем же методом, но ранее.

Обратите внимание, на то что в примере, создаваемый столбец temp_k зависит от ранее создаваемого столбца temp_f.

df.assign(temp_f=lambda x: x['temp_c'] * 9 / 5 + 32,
          temp_k=lambda x: (x['temp_f'] + 459.67) * 5 / 9)
#           temp_c  temp_f  temp_k
# Portland    17.0    62.6  290.15
# Berkeley    25.0    77.0  298.15