Метод apply
Метод apply применяется к DataFrame
и позволяет применить функцию к каждой строке
или каждому столбцу. В параметре func
передаётся вызываемый объект, а параметр
axis определяет направление: если
axis=0 (по умолчанию), функция
применяется к каждому столбцу, если
axis=1 - к каждой строке.
Метод возвращает новый объект с результатами.
Синтаксис
df.apply(func[, axis=0])
Пример
Применим функцию к каждому столбцу, которая вычисляет сумму элементов:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.apply(sum)
print(res)
Результат выполнения кода:
a 15
b 150
dtype: int64
Пример
Применим функцию к каждой строке, которая вычисляет сумму элементов:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.apply(sum, axis=1)
print(res)
Результат выполнения кода:
0 11
1 22
2 33
3 44
4 55
dtype: int64
Пример
Применим пользовательскую функцию, которая возвращает произведение элементов:
import pandas as pd
def mult(ser):
res = 1
for val in ser:
res *= val
return res
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.apply(mult)
print(res)
Результат выполнения кода:
a 120
b 12000000
dtype: int64
Пример
Передадим в функцию дополнительные
аргументы с помощью параметра args:
import pandas as pd
def pow_sum(ser, p):
return sum(val ** p for val in ser)
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.apply(pow_sum, args=(2,))
print(res)
Результат выполнения кода:
a 55
b 5500
dtype: int64
Пример
Используем лямбда-функцию для вычисления диапазона значений в каждой строке:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df.apply(lambda row: max(row) - min(row), axis=1)
print(res)
Результат выполнения кода:
0 9
1 18
2 27
3 36
4 45
dtype: int64