Bird
Raised Fist0
Data Analysis Pythondata~5 mins

apply() function for custom logic in Data Analysis Python

Choose your learning style10 modes available
Introduction

The apply() function helps you run your own rules on each row or column of data. It makes changing or analyzing data easy and flexible.

You want to add a new column based on calculations from other columns.
You need to clean or change data values with your own rules.
You want to summarize or transform data in a custom way.
You want to apply a function to each row or column without writing loops.
You want to quickly test small changes on your data.
Syntax
Data Analysis Python
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)

func is your custom function to apply.

axis=0 applies function to each column, axis=1 applies to each row.

Examples
Adds 1 to every value in each column.
Data Analysis Python
df.apply(lambda x: x + 1)
Creates a sum of columns A and B for each row.
Data Analysis Python
df.apply(lambda row: row['A'] + row['B'], axis=1)
Doubles each value in column A using a named function.
Data Analysis Python
def double(x):
    return x * 2

df['A'].apply(double)
Sample Program

This program creates a table of students and their scores. It uses apply() to add a new column with the average score for each student.

Data Analysis Python
import pandas as pd

data = {'Name': ['Anna', 'Bob', 'Cara'],
        'Math': [80, 90, 70],
        'English': [85, 88, 78]}

df = pd.DataFrame(data)

# Define a function to calculate average score
def average_score(row):
    return (row['Math'] + row['English']) / 2

# Apply the function to each row
df['Average'] = df.apply(average_score, axis=1)

print(df)
OutputSuccess
Important Notes

Using axis=1 applies the function to each row, which is common for custom logic involving multiple columns.

Functions used with apply() should return a single value for each row or column.

For large data, apply() can be slower than vectorized operations, so use it when custom logic is needed.

Summary

apply() lets you run your own function on rows or columns easily.

Use axis=1 for row-wise and axis=0 for column-wise operations.

Great for adding new columns or transforming data with custom rules.

Practice

(1/5)
1. What does the apply() function do in a pandas DataFrame?
easy
A. It merges two DataFrames together.
B. It sorts the DataFrame by a column.
C. It filters rows based on a condition.
D. It applies a custom function to each row or column.

Solution

  1. Step 1: Understand the purpose of apply()

    The apply() function is used to run a custom function on each row or column of a DataFrame.
  2. Step 2: Compare with other DataFrame methods

    Sorting, filtering, and merging are different operations and not done by apply().
  3. Final Answer:

    It applies a custom function to each row or column. -> Option D
  4. Quick Check:

    apply() = custom function application [OK]
Hint: Remember: apply() runs your function on rows or columns [OK]
Common Mistakes:
  • Confusing apply() with sort or filter methods
  • Thinking apply() merges DataFrames
  • Assuming apply() only works on columns
2. Which of the following is the correct syntax to apply a function f row-wise on a DataFrame df?
easy
A. df.apply(f, axis=0)
B. df.apply(f)
C. df.apply(f, axis=1)
D. df.apply(f, axis=2)

Solution

  1. Step 1: Recall axis parameter meaning

    In pandas, axis=1 means apply function row-wise, while axis=0 means column-wise.
  2. Step 2: Identify correct axis for row-wise

    Since the question asks for row-wise application, axis=1 is correct.
  3. Final Answer:

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

    Row-wise apply = axis=1 [OK]
Hint: Use axis=1 for rows, axis=0 for columns [OK]
Common Mistakes:
  • Using axis=0 for row-wise apply
  • Omitting axis parameter and expecting row-wise
  • Using invalid axis values like 2
3. Given the DataFrame:
import pandas as pd
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
What is the output of:
df['Sum'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(df)
medium
A. A B Sum 0 1 3 3 1 2 4 4
B. A B Sum 0 1 3 4 1 2 4 6
C. A B Sum 0 1 3 1 1 2 4 2
D. Error: axis parameter missing

Solution

  1. Step 1: Understand the lambda function

    The lambda adds values from columns 'A' and 'B' for each row.
  2. Step 2: Apply row-wise addition

    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 B
  4. Quick Check:

    Sum column = A + B per row [OK]
Hint: Sum columns row-wise with apply and axis=1 [OK]
Common Mistakes:
  • Forgetting axis=1 causes wrong operation
  • Adding columns incorrectly (e.g., column-wise)
  • Expecting apply to work without lambda
4. What is wrong with this code snippet?
df = pd.DataFrame({'X': [10, 20], 'Y': [30, 40]})
df['Result'] = df.apply(lambda x: x['X'] * 2 if x['Y'] > 35 else x['X'], axis=0)
medium
A. Using axis=0 applies function column-wise, causing a KeyError.
B. Lambda function syntax is incorrect.
C. DataFrame is missing required columns.
D. No error; code runs correctly.

Solution

  1. Step 1: Check axis parameter usage

    axis=0 applies function to each column (Series), not rows.
  2. Step 2: Understand lambda function context

    Lambda expects row with keys 'X' and 'Y', but column Series only has index labels, causing KeyError.
  3. Final Answer:

    Using axis=0 applies function column-wise, causing a KeyError. -> Option A
  4. Quick Check:

    axis=0 = columns, lambda expects rows [OK]
Hint: Use axis=1 for row-wise logic to avoid key errors [OK]
Common Mistakes:
  • Confusing axis=0 and axis=1
  • Expecting row keys when applying column-wise
  • Ignoring error messages about missing keys
5. You have a DataFrame df with columns "score" and "passed" (boolean). You want to create a new column "grade" where:
- If passed is True and score >= 90, grade is 'A'
- If passed is True and score >= 75 but < 90, grade is 'B'
- Otherwise, grade is 'F'
Which apply() function correctly implements this logic?
hard
A. df['grade'] = df.apply(lambda r: 'A' if r['passed'] and r['score'] >= 90 else ('B' if r['passed'] and r['score'] >= 75 else 'F'), axis=1)
B. df['grade'] = df.apply(lambda r: 'A' if r['score'] >= 90 else 'B' if r['score'] >= 75 else 'F', axis=0)
C. df['grade'] = df.apply(lambda r: 'A' if r['passed'] or r['score'] >= 90 else 'F', axis=1)
D. df['grade'] = df.apply(lambda r: 'A' if r['passed'] and r['score'] > 90 else 'B', axis=1)

Solution

  1. Step 1: Check axis parameter for row-wise logic

    axis=1 is needed to apply function on each row.
  2. Step 2: Verify conditional logic matches requirements

    df['grade'] = df.apply(lambda r: 'A' if r['passed'] and r['score'] >= 90 else ('B' if r['passed'] and r['score'] >= 75 else 'F'), axis=1) correctly checks if passed is True and score thresholds for 'A' and 'B', else 'F'.
  3. Step 3: Identify errors in other options

    df['grade'] = df.apply(lambda r: 'A' if r['score'] >= 90 else 'B' if r['score'] >= 75 else 'F', axis=0) uses axis=0 (wrong axis). df['grade'] = df.apply(lambda r: 'A' if r['passed'] or r['score'] >= 90 else 'F', axis=1) uses 'or' instead of 'and'. df['grade'] = df.apply(lambda r: 'A' if r['passed'] and r['score'] > 90 else 'B', axis=1) misses 'F' grade and uses wrong comparison for 90.
  4. Final Answer:

    df['grade'] = df.apply(lambda r: 'A' if r['passed'] and r['score'] >= 90 else ('B' if r['passed'] and r['score'] >= 75 else 'F'), axis=1) -> Option A
  5. Quick Check:

    Correct logic and axis=1 for row-wise apply [OK]
Hint: Use axis=1 and nested if-else for multi-condition grading [OK]
Common Mistakes:
  • Using axis=0 instead of axis=1
  • Using 'or' instead of 'and' in conditions
  • Missing else condition for failing grade
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