We use transform() to change or add data based on groups without losing the original data shape. It helps us apply calculations to each group but keep the same number of rows.
transform() for group-level operations in Pandas
DataFrame.groupby('column')['column_to_transform'].transform(function)
The function can be a string like 'mean', 'max', or a custom function.
transform() returns a Series or DataFrame with the same shape as the original data.
df.groupby('Team')['Score'].transform('mean')
df.groupby('Category')['Value'].transform(lambda x: x - x.min())
df.groupby('Group')['Data'].transform('max')
This code creates a small table with teams and scores. It then calculates the average score for each team and adds it as a new column. The original number of rows stays the same.
import pandas as pd data = {'Team': ['A', 'A', 'B', 'B', 'C', 'C'], 'Score': [10, 15, 10, 20, 5, 7]} df = pd.DataFrame(data) # Calculate mean score per team and add as new column df['Team_Mean_Score'] = df.groupby('Team')['Score'].transform('mean') print(df)
transform() keeps the original DataFrame shape, unlike agg() which reduces it.
You can use built-in functions like 'mean', 'sum', or your own custom functions with transform().
If your function returns a single value per group, transform() repeats it for each row in that group.
transform() applies a function to each group but keeps the original data size.
It is useful to add group-level calculations as new columns without losing rows.
You can use built-in or custom functions with transform().
Practice
transform() function do when used on a grouped pandas DataFrame?Solution
Step 1: Understand the purpose of
transform()transform()applies a function to each group but returns a result with the same number of rows as the original DataFrame.Step 2: Compare with other group operations
Unlike aggregation which reduces groups to single values,transform()keeps the original data size, allowing new columns with group-level info.Final Answer:
Applies a function to each group and returns a result with the same size as the original data -> Option AQuick Check:
transform()= same size output [OK]
- Confusing transform with aggregation
- Thinking transform filters groups
- Assuming transform changes group order
transform() to calculate the mean of each group in a DataFrame df grouped by column 'Category'?Solution
Step 1: Identify correct method chaining
First group by 'Category' then calltransform('mean')to apply mean to each group and keep original size.Step 2: Check other options for syntax errors
df.transform('mean').groupby('Category') calls transform before grouping, which is invalid. df.groupby('Category').mean().transform() calls mean before transform, which is wrong order. df.groupby('Category').apply(transform('mean')) misuses apply with transform.Final Answer:
df.groupby('Category').transform('mean') -> Option BQuick Check:
Group first, then transform [OK]
- Calling transform before groupby
- Using apply incorrectly with transform
- Calling aggregation before transform
df below:Category Value 0 A 5 1 A 7 2 B 3 3 B 9 4 B 6
What is the output of
df.groupby('Category')['Value'].transform('max')?Solution
Step 1: Group by 'Category' and find max per group
Group A has values [5,7], max is 7; Group B has [3,9,6], max is 9.Step 2: Apply transform to assign max to each row in group
Rows in group A get 7, rows in group B get 9, preserving original row order.Final Answer:
[7, 7, 9, 9, 9] -> Option DQuick Check:
Max per group repeated for each row [OK]
- Confusing transform output with aggregation output
- Mixing up max values per group
- Not preserving original row order
df = pd.DataFrame({'Group': ['X', 'X', 'Y'], 'Score': [10, 20, 30]})
df['MeanScore'] = df.groupby('Group')['Score'].transform(mean)What is the error in this code?
Solution
Step 1: Check function argument in transform
The functionmeanis passed without quotes, but transform expects a string or a callable.Step 2: Correct usage
Passing 'mean' as a string fixes the error:transform('mean').Final Answer:
The function name 'mean' should be a string: 'mean' -> Option AQuick Check:
Function names in transform must be strings or callables [OK]
- Passing function name without quotes
- Assuming transform can't use built-in functions
- Misnaming DataFrame columns
df with columns 'Team' and 'Points'. You want to add a new column 'PointsDiff' that shows the difference between each player's points and the average points of their team. Which code correctly uses transform() to achieve this?Solution
Step 1: Calculate team average points with transform
Usetransform('mean')to get average points per team for each row, preserving size.Step 2: Subtract team average from each player's points
Subtract the transformed mean from the original 'Points' column to get difference per player.Step 3: Check other options
df['PointsDiff'] = df.groupby('Team')['Points'].mean() - df['Points']:df.groupby('Team')['Points'].mean()returns smaller Series, size mismatch. df['PointsDiff'] = df.groupby('Team')['Points'].transform(lambda x: x.mean()):transform(lambda x: x.mean())sets PointsDiff to repeated group means, not differences. df['PointsDiff'] = df.groupby('Team')['Points'].apply(lambda x: x.mean()):apply(lambda x: x.mean())returns smaller Series of means, misalignment.Final Answer:
df['PointsDiff'] = df['Points'] - df.groupby('Team')['Points'].transform('mean') -> Option CQuick Check:
Subtract group mean using transform for aligned output [OK]
- Using apply instead of transform causing misalignment
- Not subtracting in correct order
- Confusing transform with aggregation
Ready to prove it?
Pass the test and this pattern moves unknown
