Spec-Zone.ru › pandas 1

pandas.DataFrame.transform

DataFrame.transform(func, axis=0, *args, **kwargs)[source]

Вызывает func на себе, создавая DataFrame с теми же размерами осей, что и исходный DataFrame.

Параметры
func:функция, строка, список или словарь

Функция для преобразования данных. Если функция, то она должна работать, когда ей передаётся DataFrame, или когда она передаётся методу DataFrame.apply. Если func является как списком, так и словарем, то поведение словаря имеет приоритет.

Допустимые комбинации:

  • функция

  • имя функции в виде строки

  • список функций и/или имён функций, например, [np.exp, 'sqrt']

  • словарь меток осей -> функции, имена функций или списки таких.

axis:{0 или ‘индекс’, 1 или ‘колонки’}, по умолчанию 0

Если 0 или ‘индекс’: применять функцию к каждой колонке. Если 1 или ‘колонки’: применять функцию к каждой строке.

*args

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

**kwargs

Именованные аргументы для передачи функции func.

Возвращает
DataFrame

DataFrame, длина которого должна быть такой же, как у исходного DataFrame.

Возбуждает
ValueError:Если возвращаемый DataFrame имеет другую длину, чем исходный.

См. также

DataFrame.agg

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

DataFrame.apply

Вызвать функцию для DataFrame.

Примечания

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

Примеры

>>> df = pd.DataFrame({'A': range(3), 'B': range(1, 4)})
>>> df
   A  B
0  0  1
1  1  2
2  2  3
>>> df.transform(lambda x: x + 1)
   A  B
0  1  2
1  2  3
2  3  4

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

>>> s = pd.Series(range(3))
>>> s
0    0
1    1
2    2
dtype: int64
>>> s.transform([np.sqrt, np.exp])
       sqrt        exp
0  0.000000   1.000000
1  1.000000   2.718282
2  1.414214   7.389056

Можно вызвать transform для объекта GroupBy:

>>> df = pd.DataFrame({
...     "Date": [
...         "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05",
...         "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05"],
...     "Data": [5, 8, 6, 1, 50, 100, 60, 120],
... })
>>> df
         Date  Data
0  2015-05-08     5
1  2015-05-07     8
2  2015-05-06     6
3  2015-05-05     1
4  2015-05-08    50
5  2015-05-07   100
6  2015-05-06    60
7  2015-05-05   120
>>> df.groupby('Date')['Data'].transform('sum')
0     55
1    108
2     66
3    121
4     55
5    108
6     66
7    121
Name: Data, dtype: int64
>>> df = pd.DataFrame({
...     "c": [1, 1, 1, 2, 2, 2, 2],
...     "type": ["m", "n", "o", "m", "m", "n", "n"]
... })
>>> df
   c type
0  1    m
1  1    n
2  1    o
3  2    m
4  2    m
5  2    n
6  2    n
>>> df['size'] = df.groupby('c')['type'].transform(len)
>>> df
   c type size
0  1    m    3
1  1    n    3
2  1    o    3
3  2    m    4
4  2    m    4
5  2    n    4
6  2    n    4

© 2008–2022, 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/1.5.0/reference/api/pandas.DataFrame.transform.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API