We use apply() with axis=1 to run a function on each row of a table. This helps us create new data or change existing data based on row values.
apply() on rows (axis=1) in Pandas
DataFrame.apply(function, axis=1)function is a function you write that takes a row (a Series) and returns a value.
axis=1 tells pandas to apply the function across rows, not columns.
df.apply(lambda row: row['A'] + row['B'], axis=1)
def label_row(row): if row['score'] > 50: return 'Pass' else: return 'Fail' df['result'] = df.apply(label_row, axis=1)
This code creates a table with names and scores. It then calculates the average score for each student by applying a function on each row. The result is saved in a new column 'average'.
import pandas as pd data = {'name': ['Alice', 'Bob', 'Charlie'], 'math': [80, 45, 70], 'english': [75, 55, 65]} df = pd.DataFrame(data) # Define a function to calculate average score per row def average_score(row): return (row['math'] + row['english']) / 2 # Apply function on rows df['average'] = df.apply(average_score, axis=1) print(df)
Using apply() with axis=1 can be slower on big data. For simple math, vectorized operations are faster.
The function you apply receives each row as a pandas Series, so you access columns by name like row['column_name'].
apply(axis=1) runs a function on each row of a DataFrame.
It helps create new columns or transform data based on multiple columns in the same row.
Good for custom row-wise calculations or conditions.
Practice
What does apply() with axis=1 do in a pandas DataFrame?
Solution
Step 1: Understand the axis parameter
In pandas,axis=1means the function is applied across columns for each row.Step 2: Apply function on rows
Usingapply()withaxis=1runs the function on each row individually.Final Answer:
It applies a function to each row of the DataFrame. -> Option BQuick Check:
apply(axis=1) = row-wise function [OK]
- Confusing axis=1 with column-wise operation
- Thinking apply(axis=1) applies to the whole DataFrame at once
- Assuming it only applies to the first row
Which of the following is the correct syntax to apply a function f to each row of a DataFrame df?
def f(row):
return row['A'] + row['B']Solution
Step 1: Identify axis for row-wise apply
Row-wise apply requiresaxis=1.Step 2: Check syntax correctness
df.apply(f, axis=1) usesaxis=1, which is correct. The other options use incorrect axis parameters.Final Answer:
df.apply(f, axis=1) -> Option AQuick Check:
Use axis=1 for rows [OK]
- Using axis=0 applies function column-wise
- Omitting axis defaults to axis=0
- Using incorrect axis string values
What is the output of the following code?
import pandas as pd
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
def sum_row(row):
return row['A'] + row['B']
df['Sum'] = df.apply(sum_row, axis=1)
print(df)Solution
Step 1: Understand the function sum_row
The function adds values from columns 'A' and 'B' for each row.Step 2: Apply function row-wise and add new column
Applying withaxis=1sums each row's 'A' and 'B'. For row 0: 1+3=4, row 1: 2+4=6.Final Answer:
A B Sum 0 1 3 4 1 2 4 6 -> Option DQuick Check:
Row sums = 4, 6 [OK]
- Using axis=0 sums columns, not rows
- Forgetting to assign result back to DataFrame
- Mixing up row and column indices
Identify the error in the following code snippet:
import pandas as pd
df = pd.DataFrame({'X': [10, 20], 'Y': [30, 40]})
def multiply(row):
return row['x'] * row['Y']
df['Product'] = df.apply(multiply, axis=1)
print(df)Solution
Step 1: Check column names in DataFrame
Columns are 'X' and 'Y' with uppercase letters.Step 2: Check function usage of column names
Function uses 'x' (lowercase), which does not match 'X' (uppercase), causing KeyError.Final Answer:
KeyError because 'x' column does not exist (case sensitive). -> Option AQuick Check:
Column names are case sensitive [OK]
- Ignoring case sensitivity in column names
- Using wrong axis parameter
- Assuming no error without testing
You have a DataFrame df with columns 'Name', 'Math', and 'English'. You want to create a new column 'Result' that shows 'Pass' if the average of 'Math' and 'English' is 50 or more, otherwise 'Fail'. Which code correctly uses apply() with axis=1 to do this?
Solution
Step 1: Understand the condition for passing
Pass if average of 'Math' and 'English' >= 50, else Fail.Step 2: Check each option's logic and axis
df['Result'] = df.apply(lambda row: 'Pass' if (row['Math'] + row['English']) / 2 >= 50 else 'Fail', axis=1) correctly usesaxis=1for row-wise apply and calculates average properly. df['Result'] = df.apply(lambda col: 'Pass' if (col['Math'] + col['English']) / 2 >= 50 else 'Fail', axis=0) usesaxis=0(column-wise), which is wrong. df['Result'] = df.apply(lambda row: 'Pass' if row['Math'] >= 50 and row['English'] >= 50 else 'Fail') missesaxis=1and uses wrong condition. df['Result'] = df.apply(lambda row: 'Pass' if row['Math'] + row['English'] >= 50 else 'Fail', axis=1) checks sum >= 50, which is incorrect for average >= 50.Final Answer:
df['Result'] = df.apply(lambda row: 'Pass' if (row['Math'] + row['English']) / 2 >= 50 else 'Fail', axis=1) -> Option CQuick Check:
Use axis=1 and correct average condition [OK]
- Using axis=0 applies function column-wise
- Forgetting to divide sum by 2 for average
- Using wrong logical conditions
Ready to prove it?
Pass the test and this pattern moves unknown
