Grouping by multiple columns helps you organize data into smaller parts based on several categories at once. This makes it easier to analyze patterns and summaries for each group.
Grouping by multiple columns in Pandas
df.groupby(['column1', 'column2', ...])['target_column'].aggregation_function()
You list the columns to group by inside a list.
After grouping, you choose which column to aggregate and what function to use, like sum(), mean(), or count().
df.groupby(['City', 'Month'])['Sales'].sum()
df.groupby(['Class', 'Subject'])['Score'].mean()
df.groupby(['Store', 'Product'])['Quantity'].count()
This code groups sales data by both store and product. Then it adds up the sales numbers for each group. The result shows total sales for each product in each store.
import pandas as pd data = { 'Store': ['A', 'A', 'B', 'B', 'A', 'B'], 'Product': ['Apple', 'Banana', 'Apple', 'Banana', 'Apple', 'Banana'], 'Sales': [10, 15, 5, 20, 7, 8] } df = pd.DataFrame(data) # Group by Store and Product, then sum the Sales result = df.groupby(['Store', 'Product'])['Sales'].sum() print(result)
Grouping by multiple columns creates a multi-level index in the result.
You can reset the index with reset_index() if you want a flat table.
Aggregation functions can be sum(), mean(), count(), max(), min(), and more.
Grouping by multiple columns helps analyze data by several categories at once.
Use a list of column names inside groupby() to group by more than one column.
Apply aggregation functions to get summaries like sums or averages for each group.
Practice
Solution
Step 1: Understand grouping concept
Grouping by multiple columns means splitting data into groups based on combinations of those columns.Step 2: Identify the purpose of grouping
This helps analyze data by several categories at once, like sales by region and product.Final Answer:
Analyze data by several categories at the same time -> Option CQuick Check:
Grouping multiple columns = multi-category analysis [OK]
- Thinking grouping changes data order
- Confusing grouping with filtering
- Assuming grouping changes data types
df by columns 'A' and 'B'?Solution
Step 1: Recall pandas groupby syntax
To group by multiple columns, pass a list of column names inside groupby().Step 2: Check each option
df.groupby(['A', 'B']) uses a list ['A', 'B'], which is correct syntax. Others have syntax errors or wrong method names.Final Answer:
df.groupby(['A', 'B']) -> Option AQuick Check:
List of columns inside groupby() = correct syntax [OK]
- Passing columns as separate arguments instead of a list
- Using wrong method name like group_by
- Using bitwise operators inside list
df below:City Product Sales 0 NY A 10 1 NY B 20 2 LA A 15 3 LA B 25 4 NY A 5
What is the output of
df.groupby(['City', 'Product']).sum()?Solution
Step 1: Group by City and Product
The data is grouped by both City and Product columns, creating groups like (NY, A), (NY, B), (LA, A), (LA, B).Step 2: Apply sum() aggregation
Sum sales within each group: (NY, A) = 10+5=15, (NY, B) = 20, (LA, A) = 15, (LA, B) = 25.Final Answer:
A DataFrame with total sales for each City and Product combination -> Option AQuick Check:
Group by multiple columns + sum() = grouped sums [OK]
- Expecting average instead of sum
- Grouping by only one column
- Thinking sum() causes error
df.groupby('City', 'Product').mean()Solution
Step 1: Check groupby argument format
groupby() accepts one argument for columns; multiple columns must be inside a list.Step 2: Identify error cause
Passing 'City', 'Product' as separate arguments causes a TypeError.Final Answer:
groupby() expects a single argument, so multiple columns must be passed as a list -> Option DQuick Check:
Multiple columns in groupby() = list argument [OK]
- Passing multiple columns as separate arguments
- Thinking mean() is invalid after groupby
- Assuming column names must be integers
df with columns Region, Category, and Revenue. You want to find the average revenue per region and category, but only for categories where the total revenue exceeds 1000. Which code correctly does this?Solution
Step 1: Filter groups by total revenue
Use groupby with filter and a lambda to keep only groups where sum of Revenue > 1000.Step 2: Calculate average revenue per filtered group
After filtering, group again by Region and Category and calculate mean Revenue.Final Answer:
df.groupby(['Region', 'Category']).filter(lambda x: x['Revenue'].sum() > 1000).groupby(['Region', 'Category']).Revenue.mean() -> Option BQuick Check:
Filter groups by sum, then compute mean [OK]
- Trying to filter after mean instead of before
- Using boolean indexing on Series with mismatched index
- Calculating mean of sums instead of per group
Ready to prove it?
Pass the test and this pattern moves unknown
