📖 Scenario: You work as a data analyst for a small online store. You have daily sales data and want to understand how the total sales grow over time. Instead of just looking at daily sales, you want to see the running total of sales up to each day.
🎯 Goal: Build a pandas DataFrame with daily sales data, then use expanding window operations to calculate the running total of sales for each day.
📋 What You'll Learn
Create a pandas DataFrame with exact daily sales data
Create a variable to hold the sales column name
Use pandas expanding() method to calculate running total sales
Print the resulting DataFrame with the running total column
💡 Why This Matters
🌍 Real World
Expanding window operations help analyze cumulative trends in sales, stock prices, or any time series data.
💼 Career
Data analysts and scientists use expanding windows to summarize data over time and detect patterns or growth.
Progress0 / 4 steps
1
Create the sales DataFrame
Create a pandas DataFrame called sales_data with two columns: 'day' and 'sales'. Use these exact values: days from 1 to 5, and sales as 100, 150, 200, 130, 170.
Pandas
Hint
Use pd.DataFrame with a dictionary containing the exact lists for 'day' and 'sales'.
2
Set the sales column name
Create a variable called sales_column and set it to the string 'sales'.
Pandas
Hint
Just assign the string 'sales' to the variable sales_column.
3
Calculate running total sales using expanding window
Create a new column in sales_data called 'running_total' by applying the pandas expanding() method on the sales_column and then calling sum().
Pandas
Hint
Use sales_data[sales_column].expanding().sum() to get the running total and assign it to a new column.
4
Print the DataFrame with running totals
Write a print() statement to display the sales_data DataFrame with the new 'running_total' column.
Pandas
Hint
Use print(sales_data) to show the DataFrame with the running totals.
Practice
(1/5)
1. What does an expanding window operation in pandas do?
easy
A. Sorts data in ascending order
B. Calculates values only for a fixed-size sliding window
C. Filters data based on a condition
D. Calculates cumulative values including all previous data points
Solution
Step 1: Understand expanding window concept
Expanding window operations include all data points from the start up to the current point.
Step 2: Compare with other window types
Unlike rolling windows, expanding windows grow with each step, accumulating more data.
Final Answer:
Calculates cumulative values including all previous data points -> Option D
Quick Check:
Expanding window = cumulative calculation [OK]
Hint: Expanding means cumulative from start to current [OK]
Common Mistakes:
Confusing expanding with rolling window
Thinking it filters data
Assuming it sorts data
2. Which of the following is the correct syntax to create an expanding window object on a pandas Series s?
easy
A. s.window()
B. s.expanding()
C. s.cumulative()
D. s.rolling()
Solution
Step 1: Recall pandas expanding syntax
The method to create an expanding window object is expanding() called on a Series or DataFrame.
Step 2: Eliminate incorrect options
rolling() is for rolling windows, cumulative() and window() do not exist as methods.
Final Answer:
s.expanding() -> Option B
Quick Check:
Use .expanding() for expanding windows [OK]
Hint: Use .expanding() method on Series/DataFrame [OK]
Common Mistakes:
Using .rolling() instead of .expanding()
Trying non-existent methods like .cumulative()
Confusing window types
3. Given the pandas Series s = pd.Series([2, 4, 6, 8]), what is the output of s.expanding(min_periods=2).mean()?
medium
A. [NaN, 3.0, 4.0, 5.0]
B. [2.0, 3.0, 4.0, 5.0]
C. [NaN, 4.0, 6.0, 8.0]
D. [2.0, 4.0, 6.0, 8.0]
Solution
Step 1: Understand min_periods effect
With min_periods=2, results start from the second element; first is NaN.
Step 2: Calculate expanding mean values
Means are: index 1: (2+4)/2=3.0, index 2: (2+4+6)/3=4.0, index 3: (2+4+6+8)/4=5.0.
Final Answer:
[NaN, 3.0, 4.0, 5.0] -> Option A
Quick Check:
Expanding mean with min_periods=2 starts NaN then cumulative means [OK]
Hint: min_periods controls when output starts (NaN before) [OK]
Common Mistakes:
Ignoring min_periods and showing first value
Calculating rolling mean instead of expanding mean
Miscomputing cumulative averages
4. What is wrong with this code snippet?
import pandas as pd
s = pd.Series([1, 2, 3])
result = s.expanding(min_periods=-1).sum()
medium
A. sum() cannot be used after expanding()
B. expanding() method does not exist for Series
C. min_periods cannot be negative; it must be >= 0
D. The Series must be converted to DataFrame first
Solution
Step 1: Check min_periods parameter rules
min_periods must be >= 0; negative is invalid and causes an error.
Step 2: Verify method usage
expanding() exists for Series, and sum() is valid after expanding().
Final Answer:
min_periods cannot be negative; it must be >= 0 -> Option C
Quick Check:
min_periods ≥ 0 required [OK]
Hint: min_periods must be >= 0, never negative [OK]
Common Mistakes:
Setting min_periods to a negative value causing errors
Thinking expanding() is unavailable for Series
Misusing sum() after expanding()
5. You have daily sales data in a pandas DataFrame df with a column 'sales'. You want to calculate a running average of sales but only start showing results after at least 3 days of data. Which code correctly achieves this using expanding window operations?
hard
A. df['sales'].expanding(min_periods=3).mean()
B. df['sales'].rolling(window=3).mean()
C. df['sales'].expanding(min_periods=1).mean()
D. df['sales'].cumsum() / 3
Solution
Step 1: Understand requirement for running average with minimum data
Expanding with min_periods=3 starts calculating mean only after 3 data points.
Step 2: Evaluate options
df['sales'].expanding(min_periods=3).mean() uses expanding with min_periods=3 correctly. df['sales'].rolling(window=3).mean() uses rolling window, which is different. df['sales'].expanding(min_periods=1).mean() starts from 1 data point, not 3. df['sales'].cumsum() / 3 divides cumulative sum by 3 always, which is incorrect.
Final Answer:
df['sales'].expanding(min_periods=3).mean() -> Option A
Quick Check:
Expanding with min_periods=3 for running average [OK]
Hint: Use expanding(min_periods=3) for running average after 3 days [OK]
Common Mistakes:
Using rolling instead of expanding
Setting min_periods too low
Dividing cumulative sum by fixed number
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.