Apply function to every row in a Pandas DataFrame
Last Updated :
10 Jan, 2024
Python is a great language for performing data analysis tasks. It provides a huge amount of Classes and functions which help in analyzing and manipulating data more easily. In this article, we will see how we can apply a function to every row in a Pandas Dataframe.
Apply Function to Every Row in a Pandas DataFrame
There are various ways to Perform element-wise operations on DataFrame columns. here we are discussing some examples for Perform element-wise operations on DataFrame columns those are following.
- Applying User-Defined Function to Every Row of Pandas DataFrame
- Apply Lambda to Every Row of DataFrame
- Apply NumPy.sum() to Every Row
- Normalizing DataFrame Column Values Using Custom Function in Pandas
- Applying Range Generation Function to DataFrame Rows in Pandas
One can use apply() function to apply a function to every row in a given data frame. Let’s see the ways we can do this task.
Applying User-Defined Function to Every Row of Pandas DataFrame
In this example, we defines a function add_values(row)
that calculates the sum of values in the ‘A’, ‘B’, and ‘C’ columns for each row. In the main()
function, a DataFrame is created from a dictionary, and the function is applied to every row using the apply()
method, resulting in a new column ‘add’ containing the sum values. The original and modified DataFrames are then printed.
Python3
import pandas as pd
def add_values(row):
return row[ 'A' ] + row[ 'B' ] + row[ 'C' ]
def main():
data = {
'A' : [ 1 , 2 , 3 ],
'B' : [ 4 , 5 , 6 ],
'C' : [ 7 , 8 , 9 ]}
df = pd.DataFrame(data)
print ( "Original DataFrame:\n" , df)
df[ 'add' ] = df. apply (add_values, axis = 1 )
print ( '\nAfter Applying Function: ' )
print (df)
if __name__ = = '__main__' :
main()
|
Output
Original DataFrame:
A B C
0 1 4 7
1 2 5 8
2 3 6 9
After Applying Function:
A B C add
0 1 4 7 12
1 2 5 8 15
2 3 6 9 18
Apply Lambda to Every Row of DataFrame
In this example, we defines a function add(a, b, c)
that returns the sum of its three arguments. In the main()
function, a DataFrame is created from a dictionary, and a new column ‘add’ is added to the DataFrame using the apply()
method with a lambda function. The lambda function applies the add
function element-wise to the ‘A’, ‘B’, and ‘C’ columns for every row, and the resulting DataFrame is printed before and after the function is applied. The output demonstrates applying a user-defined function to every row of the DataFrame.
Python3
import pandas as pd
def add(a, b, c):
return a + b + c
def main():
data = {
'A' : [ 1 , 2 , 3 ],
'B' : [ 4 , 5 , 6 ],
'C' : [ 7 , 8 , 9 ]}
df = pd.DataFrame(data)
print ( "Original DataFrame:\n" , df)
df[ 'add' ] = df. apply ( lambda row: add(row[ 'A' ],
row[ 'B' ], row[ 'C' ]), axis = 1 )
print ( '\nAfter Applying Function: ' )
print (df)
if __name__ = = '__main__' :
main()
|
Output
Original DataFrame:
A B C
0 1 4 7
1 2 5 8
2 3 6 9
After Applying Function:
A B C add
0 1 4 7 12
1 2 5 8 15
2 3 6 9 18
Apply NumPy.sum() to Every Row
You can use the numpy function as the parameters to the dataframe as well. In this example, we create a DataFrame from a dictionary, and then applies the NumPy sum
function to each row using the apply()
method with axis=1
, resulting in a new column ‘add’ containing the sum of values in each row. The original and modified DataFrames are then printed to demonstrate the application of the function.
Python3
import pandas as pd
import numpy as np
def main():
data = {
'A' : [ 1 , 2 , 3 ],
'B' : [ 4 , 5 , 6 ],
'C' : [ 7 , 8 , 9 ]}
df = pd.DataFrame(data)
print ( "Original DataFrame:\n" , df)
df[ 'add' ] = df. apply (np. sum , axis = 1 )
print ( '\nAfter Applying Function: ' )
print (df)
if __name__ = = '__main__' :
main()
|
Output
Original DataFrame:
A B C
0 1 4 7
1 2 5 8
2 3 6 9
After Applying Function:
A B C add
0 1 4 7 12
1 2 5 8 15
2 3 6 9 18
Normalizing DataFrame Column Values Using Custom Function in Pandas
Here, we defines a normalize
function that takes two arguments and calculates a normalized value based on their mean and range. In the main()
function, a DataFrame is created from a dictionary, and the normalize
function is applied to each row using the apply()
method with a lambda function. The resulting DataFrame contains the normalized values in column ‘X’, and both the original and modified DataFrames are printed.
Python3
import pandas as pd
def normalize(x, y):
x_new = ((x - np.mean([x, y])) /
( max (x, y) - min (x, y)))
return x_new
def main():
data = {
'X' : [ 1 , 2 , 3 ],
'Y' : [ 45 , 65 , 89 ]}
df = pd.DataFrame(data)
print ( "Original DataFrame:\n" , df)
df[ 'X' ] = df. apply ( lambda row: normalize(row[ 'X' ],
row[ 'Y' ]), axis = 1 )
print ( '\nNormalized:' )
print (df)
if __name__ = = '__main__' :
main()
|
Output
Original DataFrame:
X Y
0 1 45
1 2 65
2 3 89
Normalized:
X Y
0 -0.5 45
1 -0.5 65
2 -0.5 89
Applying Range Generation Function to DataFrame Rows in Pandas
In this example, we are creating a generate_range
function to create a range based on the given integer input, and a replace
function that applies the generate_range
function element-wise to each row of a DataFrame. In the main()
function, a DataFrame is created from a dictionary, and the replace
function is applied to each row using the apply()
method with a lambda function, resulting in a new DataFrame with values replaced by corresponding ranges. The original and modified DataFrames are then printed.
Python3
import pandas as pd
import numpy as np
pd.options.mode.chained_assignment = None
def generate_range(n):
n = int (n)
lower_limit = n / / 10 * 10
upper_limit = lower_limit + 10
return str ( str (lower_limit) + '-' + str (upper_limit))
def replace(row):
for i, item in enumerate (row):
row[i] = generate_range(item)
return row
def main():
data = {
'A' : [ 0 , 2 , 3 ],
'B' : [ 4 , 15 , 6 ],
'C' : [ 47 , 8 , 19 ]}
df = pd.DataFrame(data)
print ( 'Before applying function: ' )
print (df)
df = df. apply ( lambda row: replace(row))
print ( 'After Applying Function: ' )
print (df)
if __name__ = = '__main__' :
main()
|
Output
Before applying function:
A B C
0 0 4 47
1 2 15 8
2 3 6 19
After Applying Function:
A B C
0 0-10 0-10 40-50
1 0-10 10-20 0-10
2 0-10 0-10 10-20
Share your thoughts in the comments
Please Login to comment...