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