Bird
Raised Fist0
Data Analysis Pythondata~10 mins

Single and multiple column grouping in Data Analysis Python - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Single and multiple column grouping
Start with DataFrame
↓
Choose column(s) to group by
↓
Group rows sharing same value(s)
↓
Apply aggregation function
↓
Get grouped summary DataFrame
↓
End
We start with a table, pick one or more columns to group by, then combine rows with the same values in those columns, and finally calculate summary stats for each group.
Execution Sample
Data Analysis Python
import pandas as pd

data = {'City': ['NY', 'LA', 'NY', 'LA', 'NY'],
        'Year': [2020, 2020, 2021, 2021, 2020],
        'Sales': [100, 200, 150, 250, 300]}
df = pd.DataFrame(data)

result = df.groupby(['City', 'Year']).sum()
This code groups sales data by City and Year, then sums sales for each group.
Execution Table
StepActionGroup KeyRows in GroupAggregation Result
1Start with DataFrame-5 rows-
2Group by City and Year('NY', 2020)2 rows (index 0,4)-
3Group by City and Year('LA', 2020)1 row (index 1)-
4Group by City and Year('NY', 2021)1 row (index 2)-
5Group by City and Year('LA', 2021)1 row (index 3)-
6Sum Sales in group ('NY', 2020)-2 rowsSales = 100 + 300 = 400
7Sum Sales in group ('LA', 2020)-1 rowSales = 200
8Sum Sales in group ('NY', 2021)-1 rowSales = 150
9Sum Sales in group ('LA', 2021)-1 rowSales = 250
10Create result DataFrame with sums--4 rows with grouped sums
💡 All groups processed and aggregated, grouping complete.
Variable Tracker
VariableStartAfter GroupingAfter AggregationFinal
dfOriginal 5-row DataFrameGrouped by City and YearAggregation appliedGrouped summary DataFrame with sums
resultNot definedNot definedDataFrame with 4 rows, sums of Sales per groupSame as after aggregation
Key Moments - 3 Insights
Why does grouping by multiple columns create groups with tuples as keys?
Because each group is defined by the combination of values in all grouping columns, the keys become tuples representing those combined values, as shown in execution_table rows 2-5.
Why do some groups have multiple rows and others only one?
Groups with the same values in the grouping columns combine multiple rows, like ('NY', 2020) with 2 rows (rows 0 and 4), while others like ('LA', 2020) have only one matching row, as seen in execution_table rows 2-5.
What does the aggregation function sum() do after grouping?
It adds up the values in the 'Sales' column for each group, producing a single summary number per group, as shown in execution_table rows 6-9.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 6, what is the sum of Sales for group ('NY', 2020)?
A300
B100
C400
D250
💡 Hint
Check the 'Aggregation Result' column at step 6 in execution_table.
At which step does the grouping identify the group ('LA', 2021)?
AStep 4
BStep 5
CStep 3
DStep 2
💡 Hint
Look at the 'Group Key' column in execution_table rows 2-5.
If we grouped only by 'City' instead of ['City', 'Year'], how would the number of groups change?
AIt would decrease
BIt would increase
CIt would stay the same
DIt would be zero
💡 Hint
Refer to variable_tracker and think about grouping by fewer columns combining more rows.
Concept Snapshot
Use df.groupby(['col1', 'col2']) to group data by one or more columns.
Groups combine rows with same values in those columns.
Apply aggregation like sum(), mean() to get summary stats per group.
Result is a new DataFrame indexed by the grouping columns.
Multiple columns create tuple keys for groups.
Full Transcript
This visual execution shows how to group data in a table by one or more columns using Python's pandas library. We start with a DataFrame of sales data with columns City, Year, and Sales. Grouping by City and Year means rows with the same City and Year values are combined into groups. Each group is identified by a tuple key like ('NY', 2020). Then, we apply sum() to add up Sales values in each group. The execution table traces each step: grouping rows, counting rows per group, summing sales, and creating the final grouped summary. The variable tracker shows how the original DataFrame changes into a grouped summary DataFrame. Key moments clarify why group keys are tuples, why groups have different sizes, and what aggregation does. The quiz tests understanding of sums, group identification steps, and effects of grouping by fewer columns. The snapshot summarizes the syntax and behavior of single and multiple column grouping.

Practice

(1/5)
1. What does the groupby() function do in data analysis with pandas?
easy
A. It groups data based on one or more columns to summarize it.
B. It sorts the data alphabetically.
C. It deletes duplicate rows from the data.
D. It changes the data type of columns.

Solution

  1. Step 1: Understand the purpose of grouping

    Grouping means collecting rows that share the same value in one or more columns.
  2. Step 2: Role of groupby() in pandas

    The groupby() function in pandas helps to split data into groups based on column values for aggregation or analysis.
  3. Final Answer:

    It groups data based on one or more columns to summarize it. -> Option A
  4. Quick Check:

    Grouping = Summarizing data by columns [OK]
Hint: Remember: groupby = group rows by column values [OK]
Common Mistakes:
  • Thinking groupby sorts data
  • Confusing groupby with removing duplicates
  • Assuming groupby changes data types
2. Which of the following is the correct syntax to group a pandas DataFrame df by two columns 'A' and 'B'?
easy
A. df.groupby(['A', 'B'])
B. df.groupby('A', 'B')
C. df.group_by(['A', 'B'])
D. df.groupby(['A' & 'B'])

Solution

  1. Step 1: Check pandas groupby syntax for multiple columns

    To group by multiple columns, pass a list of column names inside groupby: df.groupby(['A', 'B']).
  2. Step 2: Identify incorrect syntax options

    df.groupby('A', 'B') misses list brackets, df.group_by(['A', 'B']) uses wrong method name, df.groupby(['A' & 'B']) uses invalid operator inside list.
  3. Final Answer:

    df.groupby(['A', 'B']) -> Option A
  4. Quick Check:

    Multiple columns = list inside groupby [OK]
Hint: Use a list of columns inside groupby for multiple columns [OK]
Common Mistakes:
  • Passing columns as separate arguments instead of list
  • Using wrong method name like group_by
  • Using operators inside list instead of commas
3. Given the DataFrame df below:
   City  Sales  Quantity
0  NY    100    2
1  LA    200    3
2  NY    150    1
3  LA    100    4
4  NY    200    2

What is the output of df.groupby('City')['Sales'].sum()?
medium
A. City LA 400 NY 350 Name: Sales, dtype: int64
B. City LA 400 NY 450 Name: Sales, dtype: int64
C. City LA 300 NY 350 Name: Sales, dtype: int64
D. City LA 300 NY 450 Name: Sales, dtype: int64

Solution

  1. Step 1: Group data by 'City' and sum 'Sales'

    Group rows by City: LA rows have Sales 200 and 100, sum = 300; NY rows have Sales 100, 150, 200, sum = 450.
  2. Step 2: Write the resulting Series

    The result shows sums per city: LA 300, NY 450, with City as index and Sales as name.
  3. Final Answer:

    City LA 300 NY 450 Name: Sales, dtype: int64 -> Option D
  4. Quick Check:

    Sum Sales by City = LA:300, NY:450 [OK]
Hint: Add values per group to find sum quickly [OK]
Common Mistakes:
  • Adding wrong rows for each city
  • Mixing sum of Sales with Quantity
  • Confusing index and values in output
4. What is wrong with this code snippet?
df.groupby('Category', 'Type').mean()
medium
A. Category and Type columns must be numeric.
B. mean() cannot be used after groupby.
C. groupby expects a list for multiple columns, not separate arguments.
D. groupby requires column names as integers.

Solution

  1. Step 1: Check groupby syntax for multiple columns

    When grouping by multiple columns, pass a list: df.groupby(['Category', 'Type']). Passing separate arguments causes error.
  2. Step 2: Verify other options

    mean() is valid after groupby; columns can be non-numeric but mean applies only to numeric; column names are strings, not integers.
  3. Final Answer:

    groupby expects a list for multiple columns, not separate arguments. -> Option C
  4. Quick Check:

    Multiple columns need list in groupby [OK]
Hint: Use list brackets for multiple columns in groupby [OK]
Common Mistakes:
  • Passing multiple columns as separate arguments
  • Thinking mean() is invalid after groupby
  • Assuming column names must be integers
5. You have a sales DataFrame df with columns 'Region', 'Product', and 'Revenue'. You want to find the average revenue per region and product, but only for products with total revenue above 1000. Which code correctly achieves this?
hard
A. df.groupby(['Region', 'Product'])['Revenue'].mean()[df['Revenue'].sum() > 1000]
B. df.groupby(['Region', 'Product']).filter(lambda x: x['Revenue'].sum() > 1000).groupby(['Region', 'Product'])['Revenue'].mean()
C. df.groupby(['Region', 'Product'])['Revenue'].sum().mean() > 1000
D. df.groupby(['Region', 'Product'])['Revenue'].mean().filter(lambda x: x > 1000)

Solution

  1. Step 1: Filter groups with total revenue above 1000

    Use filter() with a lambda to keep groups where sum of Revenue > 1000.
  2. Step 2: Calculate mean revenue per filtered group

    After filtering, group again by Region and Product and calculate mean Revenue.
  3. Step 3: Analyze other options

    df.groupby(['Region', 'Product'])['Revenue'].mean()[df['Revenue'].sum() > 1000] uses total Revenue sum instead of per-group sum, returning all means or none; df.groupby(['Region', 'Product'])['Revenue'].sum().mean() > 1000 computes mean of sums, not per group; df.groupby(['Region', 'Product'])['Revenue'].mean().filter(lambda x: x > 1000) filters means > 1000, not sums.
  4. Final Answer:

    df.groupby(['Region', 'Product']).filter(lambda x: x['Revenue'].sum() > 1000).groupby(['Region', 'Product'])['Revenue'].mean() -> Option B
  5. Quick Check:

    Filter groups by sum, then compute mean [OK]
Hint: Use filter() to keep groups before aggregation [OK]
Common Mistakes:
  • Trying to filter after aggregation with mismatched indexes
  • Confusing mean of sums with sum of means
  • Filtering on mean instead of sum
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