Bird
Raised Fist0
Pandasdata~20 mins

Split-apply-combine mental model in Pandas - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Split-apply-combine Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of groupby and aggregation
What is the output of this code snippet using pandas split-apply-combine?
Pandas
import pandas as pd

data = pd.DataFrame({
    'Team': ['A', 'A', 'B', 'B', 'C'],
    'Points': [10, 15, 10, 5, 20]
})
result = data.groupby('Team')['Points'].sum()
print(result)
A
Team
A    25
B    15
C    20
Name: Points, dtype: int64
B
Team
A    10
B    10
C    20
Name: Points, dtype: int64
C
Team
A    15
B    5
C    20
Name: Points, dtype: int64
D
Team
A    25
B    15
C    20
Name: Team, dtype: int64
Attempts:
2 left
💡 Hint
Think about what sum() does after grouping by 'Team'.
❓ data_output
intermediate
2:00remaining
Resulting DataFrame after applying mean aggregation
Given the DataFrame below, what is the resulting DataFrame after applying groupby and mean aggregation on 'Category'?
Pandas
import pandas as pd

data = pd.DataFrame({
    'Category': ['X', 'X', 'Y', 'Y', 'Z'],
    'Value': [4, 6, 8, 2, 10]
})
result = data.groupby('Category', as_index=False).mean()
print(result)
A
  Category  Value
0        X    10
1        Y    10
2        Z    10
B
  Category  Value
0        X    5.0
1        Y    5.0
2        Z   10.0
C
Category  Value
X         5.0
Y         5.0
Z        10.0
D
Category  Value
X         4
Y         8
Z        10
Attempts:
2 left
💡 Hint
Remember that mean averages the values per group.
🔧 Debug
advanced
2:00remaining
Identify the error in groupby aggregation code
What error does this code raise when run?
Pandas
import pandas as pd

data = pd.DataFrame({
    'Group': ['G1', 'G1', 'G2'],
    'Score': [10, 20, 30]
})
result = data.groupby('Group').agg({'Score': 'sum', 'Age': 'mean'})
print(result)
ANo error, prints sum and mean
BTypeError: unsupported operand type(s) for +: 'int' and 'str'
CKeyError: 'Age'
DValueError: No numeric types to aggregate
Attempts:
2 left
💡 Hint
Check if all columns in agg dictionary exist in DataFrame.
🚀 Application
advanced
2:30remaining
Calculate median per group and filter groups
You have a DataFrame with sales data. Which code correctly calculates the median sales per 'Store' and returns only stores with median sales above 100?
Pandas
import pandas as pd

data = pd.DataFrame({
    'Store': ['S1', 'S1', 'S2', 'S2', 'S3'],
    'Sales': [120, 80, 150, 200, 90]
})
A
result = data.groupby('Store')['Sales'].median()
filtered = result[result > 100]
print(filtered)
B
result = data.groupby('Store').median()['Sales']
filtered = result[result > 100]
print(filtered)
C
result = data.groupby('Store')['Sales'].mean()
filtered = result[result > 100]
print(filtered)
D
result = data.groupby('Store')['Sales'].sum()
filtered = result[result > 100]
print(filtered)
Attempts:
2 left
💡 Hint
Median is the middle value, not the average or sum.
🧠 Conceptual
expert
1:30remaining
Understanding split-apply-combine with custom aggregation
Which option best describes what happens in the split-apply-combine process when using a custom aggregation function in pandas groupby?
AData is split into groups, combined immediately, and then the custom function is applied to the combined data.
BData is combined first, then the custom function is applied to the entire dataset, and finally split into groups.
CThe custom function is applied to the entire dataset without splitting, then results are grouped.
DData is split into groups, the custom function is applied to each group independently, then the results are combined into a new DataFrame or Series.
Attempts:
2 left
💡 Hint
Think about the order: split, apply, then combine.

Practice

(1/5)
1. What is the main idea behind the split-apply-combine mental model in pandas?
easy
A. Create new columns, rename them, then delete old columns
B. Sort data, filter rows, then plot results
C. Split data into groups, apply a function to each group, then combine results
D. Load data, clean missing values, then save to file

Solution

  1. Step 1: Understand the split step

    The data is divided into groups based on some criteria using groupby().
  2. Step 2: Apply and combine steps

    A function is applied to each group separately, then the results are combined into a new DataFrame.
  3. Final Answer:

    Split data into groups, apply a function to each group, then combine results -> Option C
  4. Quick Check:

    Split-apply-combine = Group, apply, combine [OK]
Hint: Remember: split groups, apply function, combine results [OK]
Common Mistakes:
  • Confusing split-apply-combine with sorting or filtering
  • Thinking it only applies to plotting or saving files
  • Mixing up the order of steps
2. Which of the following is the correct syntax to group a DataFrame df by the column 'Category' and calculate the mean of each group?
easy
A. df.groupby('Category').mean()
B. df.mean().groupby('Category')
C. df.groupby.mean('Category')
D. df.groupby('Category').apply(mean)

Solution

  1. Step 1: Identify correct groupby syntax

    The correct way to group by a column is df.groupby('Category').
  2. Step 2: Apply aggregation function

    To get the mean of each group, use .mean() after grouping.
  3. Final Answer:

    df.groupby('Category').mean() -> Option A
  4. Quick Check:

    Groupby then mean = df.groupby('Category').mean() [OK]
Hint: Use df.groupby('col').mean() to get group means [OK]
Common Mistakes:
  • Calling mean before groupby
  • Using apply(mean) without importing mean function
  • Wrong method chaining order
3. Given the DataFrame df below:
  Category  Value
0        A      5
1        B      3
2        A      7
3        B      2
4        C      4

What is the output of df.groupby('Category').sum()?
medium
A. Category as column with sums: A=5, B=3, C=4
B. Error because sum() cannot be applied
C. Sum of all values ignoring groups: 21
D. Category as index with sums: A=12, B=5, C=4

Solution

  1. Step 1: Group data by 'Category'

    Rows are grouped by 'Category': A, B, and C groups.
  2. Step 2: Sum values in each group

    Sum values for A: 5+7=12, B: 3+2=5, C: 4.
  3. Final Answer:

    Category as index with sums: A=12, B=5, C=4 -> Option D
  4. Quick Check:

    Sum per group = A:12, B:5, C:4 [OK]
Hint: Sum values after groupby to get totals per group [OK]
Common Mistakes:
  • Summing all values ignoring groups
  • Expecting category as a column instead of index
  • Thinking sum() causes error
4. Consider this code snippet:
result = df.groupby('Type').agg({'Score': 'mean', 'Age': 'max'})

What is wrong if the code raises a KeyError?
medium
A. The aggregation functions 'mean' and 'max' are invalid
B. The DataFrame does not have a column named 'Type'
C. The groupby method cannot take a string argument
D. agg() requires a list, not a dictionary

Solution

  1. Step 1: Understand KeyError cause

    A KeyError usually means the column used for grouping does not exist in the DataFrame.
  2. Step 2: Check groupby argument and agg usage

    Using a string in groupby and a dictionary in agg is correct syntax.
  3. Final Answer:

    The DataFrame does not have a column named 'Type' -> Option B
  4. Quick Check:

    KeyError means missing column [OK]
Hint: Check column names before groupby to avoid KeyError [OK]
Common Mistakes:
  • Assuming aggregation functions are invalid
  • Thinking groupby can't take string columns
  • Misunderstanding agg() argument types
5. You have a DataFrame df with columns 'Team', 'Player', and 'Points'. You want to find the player with the highest points in each team. Which code correctly uses the split-apply-combine model to achieve this?
hard
A. df.groupby('Team').apply(lambda g: g[g['Points'] == g['Points'].max()])
B. df.groupby('Team')['Points'].max()
C. df.groupby('Player')['Points'].sum()
D. df.groupby('Team').mean()['Points']

Solution

  1. Step 1: Understand the goal

    We want the player with the highest points per team, not just the max points value.
  2. Step 2: Use groupby and apply to filter rows

    Using apply with a lambda filters each group to rows where 'Points' equals the group's max.
  3. Step 3: Check other options

    df.groupby('Team')['Points'].max() returns max points per team but not the player. df.groupby('Player')['Points'].sum() groups by player, not team. df.groupby('Team').mean()['Points'] returns mean points, not max player.
  4. Final Answer:

    df.groupby('Team').apply(lambda g: g[g['Points'] == g['Points'].max()]) -> Option A
  5. Quick Check:

    Use apply with filter to get max player per group [OK]
Hint: Use groupby + apply with filter to get max per group row [OK]
Common Mistakes:
  • Using max() alone returns only values, not rows
  • Grouping by wrong column
  • Using mean() instead of max()
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