Bird
Raised Fist0
Pandasdata~20 mins

apply() on rows (axis=1) in Pandas - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Apply Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of apply() with axis=1 on a DataFrame
What is the output of this code snippet?
import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

result = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(result)
Pandas
import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

result = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(result)
A
A    6
B   15
dtype: int64
B
0    4
1    5
2    6
dtype: int64
C
0    5
1    7
2    9
dtype: int64
D
0    1
1    2
2    3
dtype: int64
Attempts:
2 left
💡 Hint
Remember that axis=1 means the function is applied to each row, not each column.
❓ data_output
intermediate
2:00remaining
Resulting DataFrame after apply() with axis=1
Given this code, what is the resulting DataFrame?
import pandas as pd

df = pd.DataFrame({
    'X': [10, 20],
    'Y': [1, 2]
})

def add_columns(row):
    return pd.Series({'Sum': row['X'] + row['Y'], 'Diff': row['X'] - row['Y']})

result = df.apply(add_columns, axis=1)
print(result)
Pandas
import pandas as pd

df = pd.DataFrame({
    'X': [10, 20],
    'Y': [1, 2]
})

def add_columns(row):
    return pd.Series({'Sum': row['X'] + row['Y'], 'Diff': row['X'] - row['Y']})

result = df.apply(add_columns, axis=1)
print(result)
A
   Sum  Diff
0   11     9
1   22    18
B
   X   Y
0  11   9
1  22  18
C
   Sum  Diff
0   9    11
1  18    22
D
0    11
1    22
dtype: int64
Attempts:
2 left
💡 Hint
The function returns a Series with two keys, so the result will have two columns.
🔧 Debug
advanced
2:00remaining
Identify the error in apply() usage with axis=1
What error does this code raise?
import pandas as pd

df = pd.DataFrame({'A': [1, 2]})

result = df.apply(lambda row: row['B'] * 2, axis=1)
print(result)
Pandas
import pandas as pd

df = pd.DataFrame({'A': [1, 2]})

result = df.apply(lambda row: row['B'] * 2, axis=1)
print(result)
AKeyError: 'B'
BTypeError: unsupported operand type(s) for *: 'int' and 'str'
CAttributeError: 'Series' object has no attribute 'B'
DNo error, outputs a Series with doubled values
Attempts:
2 left
💡 Hint
Check if the column 'B' exists in the DataFrame.
❓ visualization
advanced
2:00remaining
Visualizing apply() results on rows
What does this code plot?
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    'Height': [150, 160, 170],
    'Weight': [50, 60, 70]
})

df['BMI'] = df.apply(lambda row: row['Weight'] / ((row['Height']/100) ** 2), axis=1)

plt.bar(df.index, df['BMI'])
plt.xlabel('Person Index')
plt.ylabel('BMI')
plt.title('BMI of Persons')
plt.show()
Pandas
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    'Height': [150, 160, 170],
    'Weight': [50, 60, 70]
})

df['BMI'] = df.apply(lambda row: row['Weight'] / ((row['Height']/100) ** 2), axis=1)

plt.bar(df.index, df['BMI'])
plt.xlabel('Person Index')
plt.ylabel('BMI')
plt.title('BMI of Persons')
plt.show()
AA line chart showing Height vs Weight
BA bar chart showing BMI values for 3 persons indexed 0,1,2
CA scatter plot of Height vs BMI
DAn empty plot with no bars
Attempts:
2 left
💡 Hint
Look at the plt.bar call and what data it uses.
🚀 Application
expert
2:30remaining
Using apply() with axis=1 to classify data
Given this DataFrame, which option correctly adds a new column 'Category' that labels each row as 'High' if 'Score' > 75, else 'Low'?
import pandas as pd

df = pd.DataFrame({'Name': ['Anna', 'Bob', 'Cara'], 'Score': [80, 70, 90]})

# Add 'Category' column here
Pandas
import pandas as pd

df = pd.DataFrame({'Name': ['Anna', 'Bob', 'Cara'], 'Score': [80, 70, 90]})

# Add 'Category' column here
Adf['Category'] = df.apply(lambda row: 'High' if row.Score > 75 else 'Low')
Bdf['Category'] = df['Score'].apply(lambda x: 'High' if x > 75 else 'Low')
Cdf['Category'] = df.apply(lambda col: 'High' if col['Score'] > 75 else 'Low', axis=0)
Ddf['Category'] = df.apply(lambda row: 'High' if row['Score'] > 75 else 'Low', axis=1)
Attempts:
2 left
💡 Hint
Remember axis=1 applies the function to each row, axis=0 applies to columns.

Practice

(1/5)
1.

What does apply() with axis=1 do in a pandas DataFrame?

easy
A. It applies a function to each column of the DataFrame.
B. It applies a function to each row of the DataFrame.
C. It applies a function to the entire DataFrame at once.
D. It applies a function only to the first row.

Solution

  1. Step 1: Understand the axis parameter

    In pandas, axis=1 means the function is applied across columns for each row.
  2. Step 2: Apply function on rows

    Using apply() with axis=1 runs the function on each row individually.
  3. Final Answer:

    It applies a function to each row of the DataFrame. -> Option B
  4. Quick Check:

    apply(axis=1) = row-wise function [OK]
Hint: Remember axis=1 means row-wise operation [OK]
Common Mistakes:
  • 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
2.

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']
easy
A. df.apply(f, axis=1)
B. df.apply(f, axis=0)
C. df.apply(f)
D. df.apply(f, axis='rows')

Solution

  1. Step 1: Identify axis for row-wise apply

    Row-wise apply requires axis=1.
  2. Step 2: Check syntax correctness

    df.apply(f, axis=1) uses axis=1, which is correct. The other options use incorrect axis parameters.
  3. Final Answer:

    df.apply(f, axis=1) -> Option A
  4. Quick Check:

    Use axis=1 for rows [OK]
Hint: Use axis=1 to apply function row-wise [OK]
Common Mistakes:
  • Using axis=0 applies function column-wise
  • Omitting axis defaults to axis=0
  • Using incorrect axis string values
3.

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)
medium
A. Error: KeyError
B. A B Sum 0 1 3 3 1 2 4 4
C. A B Sum 0 1 3 1 1 2 4 2
D. A B Sum 0 1 3 4 1 2 4 6

Solution

  1. Step 1: Understand the function sum_row

    The function adds values from columns 'A' and 'B' for each row.
  2. Step 2: Apply function row-wise and add new column

    Applying with axis=1 sums each row's 'A' and 'B'. For row 0: 1+3=4, row 1: 2+4=6.
  3. Final Answer:

    A B Sum 0 1 3 4 1 2 4 6 -> Option D
  4. Quick Check:

    Row sums = 4, 6 [OK]
Hint: Sum columns per row with apply(axis=1) [OK]
Common Mistakes:
  • Using axis=0 sums columns, not rows
  • Forgetting to assign result back to DataFrame
  • Mixing up row and column indices
4.

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)
medium
A. KeyError because 'x' column does not exist (case sensitive).
B. TypeError due to wrong axis parameter.
C. No error, output is correct.
D. SyntaxError in function definition.

Solution

  1. Step 1: Check column names in DataFrame

    Columns are 'X' and 'Y' with uppercase letters.
  2. Step 2: Check function usage of column names

    Function uses 'x' (lowercase), which does not match 'X' (uppercase), causing KeyError.
  3. Final Answer:

    KeyError because 'x' column does not exist (case sensitive). -> Option A
  4. Quick Check:

    Column names are case sensitive [OK]
Hint: Check exact column names and case sensitivity [OK]
Common Mistakes:
  • Ignoring case sensitivity in column names
  • Using wrong axis parameter
  • Assuming no error without testing
5.

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?

hard
A. df['Result'] = df.apply(lambda row: 'Pass' if row['Math'] + row['English'] >= 50 else 'Fail', axis=1)
B. df['Result'] = df.apply(lambda col: 'Pass' if (col['Math'] + col['English']) / 2 >= 50 else 'Fail', axis=0)
C. df['Result'] = df.apply(lambda row: 'Pass' if (row['Math'] + row['English']) / 2 >= 50 else 'Fail', axis=1)
D. df['Result'] = df.apply(lambda row: 'Pass' if row['Math'] >= 50 and row['English'] >= 50 else 'Fail')

Solution

  1. Step 1: Understand the condition for passing

    Pass if average of 'Math' and 'English' >= 50, else Fail.
  2. 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 uses axis=1 for 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) uses axis=0 (column-wise), which is wrong. df['Result'] = df.apply(lambda row: 'Pass' if row['Math'] >= 50 and row['English'] >= 50 else 'Fail') misses axis=1 and 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.
  3. Final Answer:

    df['Result'] = df.apply(lambda row: 'Pass' if (row['Math'] + row['English']) / 2 >= 50 else 'Fail', axis=1) -> Option C
  4. Quick Check:

    Use axis=1 and correct average condition [OK]
Hint: Use axis=1 and check average inside lambda [OK]
Common Mistakes:
  • Using axis=0 applies function column-wise
  • Forgetting to divide sum by 2 for average
  • Using wrong logical conditions
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard