pandas.DataFrame.apply
-
DataFrame.apply(self, func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds)[source] -
Применение функции вдоль оси DataFrame.
Объекты, передаваемые в функцию, — это объекты Series, индекс которых является либо индексом DataFrame (
axis=0) , либо столбцами DataFrame (axis=1). По умолчанию (result_type=None) конечный тип возвращаемого значения определяется по типу возвращаемого значения применённой функции. В противном случае, это зависит от аргументаresult_type.Параметры: -
func : function -
Функция, применяемая к каждому столбцу или строке.
-
axis : {0 or ‘index’, 1 or ‘columns’}, default 0 -
Ось, вдоль которой применяется функция:
- 0 или ‘index’: применение функции к каждому столбцу.
- 1 или ‘columns’: применение функции к каждой строке.
-
broadcast : bool, optional -
Актуально только для агрегирующих функций:
-
FalseилиNone: возвращает Series, длина которой равна длине индекса или количеству столбцов (в зависимости от параметраaxis) -
True: результаты будут транслироваться к исходной форме фрейма, исходный индекс и столбцы сохранятся.
Устарело начиная с версии 0.23.0: Этот аргумент будет удален в будущей версии, заменён на result_type=’broadcast’.
-
-
raw : bool, default False -
-
False: передаёт каждую строку или столбец в функцию как объект Series. -
True: переданная функция будет получать объекты ndarray вместо них. Если вы просто применяете функцию NumPy-редукции, это позволит значительно улучшить производительность.
-
-
reduce : bool or None, default None -
Попытка применить процедуры редукции. Если DataFrame пустой,
applyбудет использоватьreduceдля определения, должно ли быть результатом Series или DataFrame. Еслиreduce=None(значение по умолчанию), возвращаемое значениеapplyбудет угадано вызовомfuncдля пустой Series (при угадывании исключения, генерируемыеfunc, будут игнорироваться). Еслиreduce=True, всегда будет возвращена Series, а еслиreduce=False, всегда будет возвращён DataFrame.Устарело начиная с версии 0.23.0: Этот аргумент будет удалён в будущей версии, заменён на
result_type='reduce'. -
result_type : {‘expand’, ‘reduce’, ‘broadcast’, None}, default None -
Эти параметры действуют только когда
axis=1(столбцы):- ‘expand’ : спископодобные результаты будут преобразовываться в столбцы.
- ‘reduce’ : возвращает Series, если это возможно, а не расширяет спископодобные результаты. Это противоположно ‘expand’.
- ‘broadcast’ : результаты будут транслироваться к исходной форме DataFrame, исходный индекс и столбцы сохранятся.
Поведение по умолчанию (None) зависит от возвращаемого значения применённой функции: спископодобные результаты будут возвращены как Series из этих результатов. Однако, если функция apply возвращает Series, они будут расширены в столбцы.
Введено в версии 0.23.0.
-
args : tuple -
Позиционные аргументы для передачи в
funcпомимо массива/series. - **kwds
-
Дополнительные ключевые аргументы для передачи в качестве ключевых аргументов в
func.
Возвращает: - Series или DataFrame
-
Результат применения
funcвдоль заданной оси DataFrame.
См. также
-
DataFrame.applymap - Для элементных операций.
-
DataFrame.aggregate - Только для операций агрегирования.
-
DataFrame.transform - Только для операций трансформации.
Примечания
В текущей реализации apply вызывает
funcдважды для первого столбца/строки, чтобы определить, может ли он использовать быстрый или медленный путь кода. Это может привести к неожиданному поведению, еслиfuncимеет побочные эффекты, поскольку они будут действовать дважды для первого столбца/строки.Примеры
>>> df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B']) >>> df A B 0 4 9 1 4 9 2 4 9
Использование универсальной функции NumPy (в этом случае аналогичной
np.sqrt(df)):>>> df.apply(np.sqrt) A B 0 2.0 3.0 1 2.0 3.0 2 2.0 3.0Использование редуцирующей функции по любой оси
>>> df.apply(np.sum, axis=0) A 12 B 27 dtype: int64
>>> df.apply(np.sum, axis=1) 0 13 1 13 2 13 dtype: int64
Возврат спископодобного значения приведёт к Series
>>> df.apply(lambda x: [1, 2], axis=1) 0 [1, 2] 1 [1, 2] 2 [1, 2] dtype: object
Передача result_type=’expand’ расширит спископодобные результаты в столбцы DataFrame
>>> df.apply(lambda x: [1, 2], axis=1, result_type='expand') 0 1 0 1 2 1 1 2 2 1 2
Возврат Series внутри функции аналогичен передаче
result_type='expand'. Результирующие имена столбцов будут индексом Series.>>> df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1) foo bar 0 1 2 1 1 2 2 1 2
Передача
result_type='broadcast'обеспечит результат той же формы, будь то спископодобное или скалярное значение, возвращаемое функцией, и транслирует его вдоль оси. Результирующие имена столбцов будут исходными.>>> df.apply(lambda x: [1, 2], axis=1, result_type='broadcast') A B 0 1 2 1 1 2 2 1 2
-
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.25.0/reference/api/pandas.DataFrame.apply.html