Bird
Raised Fist0
Pandasdata~10 mins

Pivot with aggregation functions in Pandas - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Pivot with aggregation functions
Start with DataFrame
↓
Choose index, columns, values
↓
Apply aggregation function
↓
Create pivot table
↓
View summarized data
We start with a DataFrame, select which columns to use as index, columns, and values, then apply an aggregation function to summarize data in a pivot table.
Execution Sample
Pandas
import pandas as pd

data = {'City': ['NY', 'LA', 'NY', 'LA', 'NY'],
        'Year': [2020, 2020, 2021, 2021, 2021],
        'Sales': [100, 200, 150, 250, 300]}

df = pd.DataFrame(data)

pivot = df.pivot_table(index='City', columns='Year', values='Sales', aggfunc='sum')
This code creates a pivot table that sums sales for each city by year.
Execution Table
StepActionDataFrame StatePivot Table State
1Create DataFrame from data dictionaryCity Year Sales 0 NY 2020 100 1 LA 2020 200 2 NY 2021 150 3 LA 2021 250 4 NY 2021 300N/A
2Call pivot_table with index='City', columns='Year', values='Sales', aggfunc='sum'Same as step 1Year 2020 2021 City LA 200 250 NY 100 450
3Pivot table created with sums of Sales by City and YearSame as step 1Same as step 2
💡 Pivot table created after aggregation sums sales grouped by City and Year.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
dfNoneDataFrame with 5 rows and 3 columnsSameSame
pivotNoneNonePivot table with summed salesSame
Key Moments - 2 Insights
Why do we use aggfunc='sum' in pivot_table?
Because there are multiple sales entries for the same City and Year, aggfunc='sum' tells pandas to add these sales together. See execution_table step 2 where aggregation happens.
What happens if we don't specify values in pivot_table?
Pandas will try to aggregate all numeric columns. Here, specifying values='Sales' focuses aggregation only on sales data, as shown in execution_table step 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2, what is the sum of sales for NY in 2021?
A450
B300
C150
D100
💡 Hint
Check the pivot table state in execution_table step 2 under City 'NY' and Year '2021'.
At which step is the pivot table actually created?
AStep 1
BStep 2
CStep 3
DPivot table is never created
💡 Hint
See execution_table rows describing when pivot_table is called and created.
If we change aggfunc from 'sum' to 'mean', what changes in the pivot table?
APivot table will not change
BPivot table will have counts instead of sums
CSales values will be averaged instead of summed
DPivot table will show maximum sales
💡 Hint
aggfunc controls how values are combined; 'mean' calculates average instead of sum.
Concept Snapshot
pivot_table(index, columns, values, aggfunc)
- index: rows to group by
- columns: columns to spread
- values: data to aggregate
- aggfunc: function to summarize (sum, mean, etc.)
Creates a summary table by grouping and aggregating data.
Full Transcript
We start with a DataFrame containing sales data by city and year. Using pandas pivot_table, we select 'City' as index, 'Year' as columns, and 'Sales' as values. We apply the sum aggregation function to add sales for each city-year pair. The pivot table shows total sales per city for each year. This process groups data and summarizes it in a clear table format.

Practice

(1/5)
1. What does the pivot_table function in pandas primarily do?
easy
A. It rearranges data to summarize and compare values using aggregation.
B. It sorts data alphabetically by column names.
C. It deletes duplicate rows from the DataFrame.
D. It converts a DataFrame into a list of dictionaries.

Solution

  1. Step 1: Understand the purpose of pivot_table

    The pivot_table function rearranges data by creating a new table that summarizes data values grouped by specified keys.
  2. Step 2: Recognize aggregation role

    It uses aggregation functions like sum or mean to combine data values in the new table.
  3. Final Answer:

    It rearranges data to summarize and compare values using aggregation. -> Option A
  4. Quick Check:

    pivot_table = rearrange + aggregate [OK]
Hint: Pivot tables summarize data by grouping and aggregating [OK]
Common Mistakes:
  • Confusing pivot_table with sorting or filtering
  • Thinking it deletes duplicates
  • Believing it converts DataFrame to list
2. Which of the following is the correct syntax to create a pivot table with pandas to calculate the mean of 'Sales' grouped by 'Region'?
easy
A. pd.pivot_table(data, columns='Region', values='Sales', aggfunc='sum')
B. pd.pivot_table(data, index='Region', values='Sales', aggfunc='mean')
C. data.pivot_table(index='Region', 'Sales', aggfunc='mean')
D. pd.pivot(data, index='Region', values='Sales', aggfunc='mean')

Solution

  1. Step 1: Identify correct function and parameters

    The correct function is pd.pivot_table with parameters: data, index='Region', values='Sales', and aggfunc='mean'.
  2. Step 2: Check each option

    pd.pivot_table(data, index='Region', values='Sales', aggfunc='mean') matches the correct syntax. pd.pivot(data, index='Region', values='Sales', aggfunc='mean') uses pd.pivot which does not support aggfunc. data.pivot_table('Sales', 'Region', aggfunc='mean') has wrong method call syntax. pd.pivot_table(data, columns='Region', values='Sales', aggfunc='sum') uses columns instead of index and wrong aggregation.
  3. Final Answer:

    pd.pivot_table(data, index='Region', values='Sales', aggfunc='mean') -> Option B
  4. Quick Check:

    pivot_table + index + values + aggfunc = correct syntax [OK]
Hint: Use pd.pivot_table with index, values, and aggfunc parameters [OK]
Common Mistakes:
  • Using pd.pivot instead of pd.pivot_table
  • Mixing columns and index parameters
  • Incorrect method call on DataFrame
3. Given the DataFrame:
import pandas as pd
data = pd.DataFrame({
  'City': ['A', 'A', 'B', 'B'],
  'Category': ['X', 'Y', 'X', 'Y'],
  'Value': [10, 20, 30, 40]
})
pivot = pd.pivot_table(data, index='City', columns='Category', values='Value', aggfunc='sum')

What is the output of pivot?
medium
A. Category X Y City A 15 15 B 35 35
B. Category X Y City A 20 10 B 40 30
C. Category X Y City A 10 20 B 30 40
D. Category X Y City A 10 40 B 30 20

Solution

  1. Step 1: Group data by 'City' and 'Category'

    For City 'A' and Category 'X', value is 10; for 'A' and 'Y', value is 20. For City 'B' and Category 'X', value is 30; for 'B' and 'Y', value is 40.
  2. Step 2: Apply sum aggregation

    Since each group has one value, sum is the same as the value itself.
  3. Final Answer:

    Category X Y City A 10 20 B 30 40 -> Option C
  4. Quick Check:

    Sum per group matches values [OK]
Hint: Sum values grouped by index and columns for pivot output [OK]
Common Mistakes:
  • Swapping values for categories
  • Mixing up rows and columns
  • Using mean instead of sum
4. Consider this code snippet:
import pandas as pd
data = pd.DataFrame({
  'Team': ['A', 'A', 'B', 'B'],
  'Points': [5, 10, 15, 20]
})
pivot = pd.pivot_table(data, index='Team', values='Points', aggfunc='count')
print(pivot)

What is the error or issue in this code?
medium
A. No error; output shows count of points per team.
B. aggfunc='count' is invalid; should use 'sum' instead.
C. Missing columns parameter causes runtime error.
D. DataFrame missing 'columns' argument for pivot_table.

Solution

  1. Step 1: Understand aggfunc='count'

    The 'count' aggregation counts non-null entries in 'Points' for each 'Team'.
  2. Step 2: Check code correctness

    The code is valid and will output the count of 'Points' per team without error.
  3. Final Answer:

    No error; output shows count of points per team. -> Option A
  4. Quick Check:

    aggfunc='count' counts entries correctly [OK]
Hint: aggfunc='count' counts non-null values, no columns needed [OK]
Common Mistakes:
  • Thinking 'count' is invalid aggfunc
  • Expecting columns parameter is mandatory
  • Confusing count with sum
5. You have sales data with columns: 'Store', 'Product', 'Month', and 'Revenue'. You want to create a pivot table that shows the total revenue per 'Store' for each 'Month', but only for months where total revenue exceeds 1000. Which approach correctly achieves this?
hard
A. Filter original data for revenue > 1000, then pivot with index='Store', columns='Month', values='Revenue', aggfunc='sum'.
B. Use pivot_table with index='Month', columns='Store', values='Revenue', aggfunc='mean', then filter values > 1000.
C. Pivot with index='Store', columns='Product', values='Revenue', aggfunc='sum', then filter rows with sum > 1000.
D. Create pivot with index='Store', columns='Month', values='Revenue', aggfunc='sum', then filter columns with sum > 1000.

Solution

  1. Step 1: Create pivot table by Store and Month

    Use pivot_table with index='Store', columns='Month', values='Revenue', and aggfunc='sum' to get total revenue per store per month.
  2. Step 2: Filter months by total revenue

    Since filtering by months with revenue > 1000 is needed, filter columns after pivot since columns represent months.
  3. Step 3: Choose correct approach

    Create pivot with index='Store', columns='Month', values='Revenue', aggfunc='sum', then filter columns with sum > 1000, which creates the pivot and then filters columns (months) where total revenue exceeds 1000, matching the requirement.
  4. Final Answer:

    Create pivot with index='Store', columns='Month', values='Revenue', aggfunc='sum', then filter columns with sum > 1000. -> Option D
  5. Quick Check:

    Pivot then filter sums > 1000 [OK]
Hint: Pivot first, then filter aggregated sums to meet condition [OK]
Common Mistakes:
  • Filtering raw data before pivot loses aggregation
  • Using mean instead of sum for totals
  • Mixing up index and columns parameters
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