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