pandas.DataFrame.transform#

DataFrame.преобразовать(функция, ось=0, *args, **kwargs)[источник]#

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

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

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

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

  • функция

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

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

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

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

Если 0 или 'index': применить функцию к каждому столбцу. Если 1 или 'columns': применить функцию к каждой строке.

*args

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

**kwargs

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

Возвращает:
DataFrame

DataFrame, который должен иметь ту же длину, что и self.

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

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

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