Pandas apply() function used to apply a function along an axis of the DataFrame. This tutorial has explained how to use apply() method with DataFrame by applying a numpy function, a lambda function and user-defined function.
Syntax:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
Parameters:
func - Function to apply to each column or row.
axis - (default 0) Axis along which the function is applied:
0 or ‘index’: apply function to each column.
1 or ‘columns’: apply function to each row.
raw - default False
False: passes each row or column as a Series to the function
True: the passed function will receive ndarray objects instead. If you are just
applying a NumPy reduction function this will achieve much better performance.
result_type - {‘expand’, ‘reduce’, ‘broadcast’, None}, default None
These only act when axis=1 (columns):
‘expand’ : list-like results will be turned into columns.
‘reduce’ : returns a Series if possible rather than expanding list-like
results. This is the opposite of ‘expand’.
‘broadcast’ : results will be broadcast to the original shape of the
DataFrame, the original index and columns will be retained.
args - tuple Positional arguments to pass to func in addition to the array/series.
Examples
In [1]:
# Let's define DataFrame
import pandas as pd
import numpy as np
df = pd.DataFrame([[1,2], [6, 1], [9,5],[1 ,4]], columns=list('AB'))
df
Out[1]:
A B
0 1 2
1 6 1
2 9 5
3 1 4
Using a numpy function
In [2]: df.apply(np.square) # Find the square of each element
Out[2]:
A B
0 1 4
1 36 1
2 81 25
3 1 16
In [3]: df.apply(np.sum,axis=1) # Find the sum over each row
Out[3]:
0 3
1 7
2 14
3 5
dtype: int64
In [4]: df.apply(np.sum,axis=0) # Find the sum over each column
out[4]:
A 17
B 12
dtype: int64
Using a user-defined function
In [5]: df
Out[5]:
A B
0 1 2
1 6 1
2 9 5
3 1 4
# Let's define a function
In [6]:
def multiply_by_5(x):
return x*5
# Apply 'multiply_by_5' function to each elements of the DataFrame
In [7]: df['C'] = df['B'].apply(multiply_by_5)
In [8]: df
Out[8]:
A B C
0 1 2 10
1 6 1 5
2 9 5 25
3 1 4 20
Using a lambda function
In [9]: df['D'] = df['A'].apply(lambda x: x*5) In [10]: df Out[10]: A B C D 0 1 2 10 5 1 6 1 5 30 2 9 5 25 45 3 1 4 20 5
Returning a list-like will result in a Series
In [11]: df.apply(lambda x: [1, 2], axis=1) Out[11]: 0 [1, 2] 1 [1, 2] 2 [1, 2] 3 [1, 2] dtype: object
Passing result_type=’expand’ will expand list-like results to columns of a Dataframe
In [12]: df.apply(lambda x: [1, 2], axis=1, result_type='expand') Out[12]: 0 1 0 1 2 1 1 2 2 1 2 3 1 2
. . .