pandas.DataFrame.apply#

DataFrame.apply(функция, ось=0, raw=False, result_type=None, args=(), by_row='compat', движок='python', engine_kwargs=None, **kwargs)[источник]#

Применить функцию вдоль оси DataFrame.

Объекты, передаваемые функции, являются объектами Series, чей индекс — либо индекс DataFrame (axis=0) или столбцы DataFrame (axis=1). По умолчанию (result_type=None), окончательный тип возвращаемого значения выводится из типа возвращаемого значения примененной функции. В противном случае, это зависит от result_type аргумент.

Параметры:
функцияфункция

Функция для применения к каждому столбцу или строке.

ось{0 или 'index', 1 или 'columns'}, по умолчанию 0

Ось, вдоль которой применяется функция:

  • 0 или 'index': применяет функцию к каждому столбцу.

  • 1 или 'columns': применяет функцию к каждой строке.

rawbool, по умолчанию False

Определяет, передается ли строка или столбец как объект Series или ndarray:

  • False : передает каждую строку или столбец как Series в функцию.

  • True : переданная функция будет получать объекты ndarray вместо этого. Если вы просто применяете функцию редукции NumPy, это обеспечит гораздо лучшую производительность.

result_type{‘expand’, ‘reduce’, ‘broadcast’, None}, по умолчанию None

Они действуют только когда axis=1 (столбцы):

  • ‘expand’ : результаты в виде списка будут преобразованы в столбцы.

  • ‘reduce’ : возвращает Series, если возможно, вместо расширения результатов, подобных спискам. Это противоположно ‘expand’.

  • 'broadcast' : результаты будут транслироваться к исходной форме DataFrame, исходные индекс и столбцы будут сохранены.

Поведение по умолчанию (None) зависит от возвращаемого значения применяемой функции: результаты в виде списка будут возвращены как Series из них. Однако если применяемая функция возвращает Series, они расширяются до столбцов.

argsкортеж

Позиционные аргументы для передачи в функция в дополнение к массиву/серии.

by_rowFalse или “compat”, по умолчанию “compat”

Имеет эффект только когда func является списком или словарем функций и функция не является строкой. Если "compat", по возможности сначала переведет функцию в методы pandas (например, Series().apply(np.sum) будет преобразовано в Series().sum()). Если это не сработает, будет предпринята повторная попытка вызова apply с by_row=True и если это не удастся, вызовет apply снова с by_row=False (обратно совместимо). Если False, функции будут передаваться весь Series целиком.

Добавлено в версии 2.1.0.

движок{‘python’, ‘numba’}, по умолчанию ‘python’

Выбрать между движком python (по умолчанию) или движком numba в apply.

Движок numba попытается JIT-скомпилировать переданную функцию, что может привести к ускорению для больших DataFrame. Он также поддерживает следующие engine_kwargs:

  • nopython (компиляция функции в режиме nopython)

  • nogil (освобождение GIL внутри JIT-скомпилированной функции)

  • параллельно (попытка применить функцию параллельно по DataFrame)

    Примечание: Из-за ограничений в numba/способах взаимодействия pandas с numba, вы должны использовать это только если raw=True

Примечание: компилятор numba поддерживает только подмножество допустимых операций Python/numpy.

Подробнее читайте о поддерживаемые возможности python и поддерживаемые возможности numpy в numba, чтобы узнать, что можно или нельзя использовать в переданной функции.

Добавлено в версии 2.2.0.

engine_kwargsdict

Передача аргументов ключевых слов в движок. В настоящее время это используется только движком numba, см. документацию по аргументу engine для получения дополнительной информации.

**kwargs

Дополнительные ключевые аргументы для передачи в качестве аргументов ключевых слов в функция.

Возвращает:
Series или DataFrame

Результат применения func вдоль заданной оси DataFrame.

Смотрите также

DataFrame.map

Для поэлементных операций.

DataFrame.aggregate

Выполнять только агрегирующие операции типа.

DataFrame.transform

Выполнять только операции преобразования типов.

Примечания

Функции, изменяющие переданный объект, могут вызывать неожиданное поведение или ошибки и не поддерживаются. См. Изменение с помощью методов пользовательских функций (UDF) для получения дополнительной информации.

Примеры

>>> 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