Window functions help us look at data in small groups or windows. They let us calculate things like running totals or averages without losing the original data.
Why window functions matter in Pandas
df['new_column'] = df['value_column'].rolling(window_size).function() # or using pandas window functions like: df['rank'] = df.groupby('group_column')['value_column'].rank()
rolling() creates a moving window over rows.
Window functions often work with groupby() to handle groups separately.
df['running_sum'] = df['sales'].rolling(3).sum()
df['rank'] = df.groupby('team')['score'].rank(ascending=False)
df['moving_avg'] = df['temperature'].rolling(window=5).mean()
This code shows how to calculate a running total of sales over the last 3 days using a window function. It keeps all rows and adds a new column with the sum of the current and previous two sales.
import pandas as pd data = {'day': [1, 2, 3, 4, 5], 'sales': [100, 150, 200, 130, 170]} df = pd.DataFrame(data) # Calculate running total of sales over last 3 days df['running_total'] = df['sales'].rolling(3).sum() print(df)
Window functions do not reduce the number of rows; they add new info per row.
NaN values appear at the start when the window is not full yet.
They are very useful for time series and grouped data analysis.
Window functions let you analyze data in small groups or moving windows.
They help calculate running totals, averages, ranks, and differences without losing rows.
They are powerful for understanding trends and comparisons in data.
Practice
Solution
Step 1: Understand window function purpose
Window functions perform calculations across a set of rows related to the current row without reducing the number of rows.Step 2: Compare options
They allow calculations over a subset of rows without collapsing the data. correctly describes this benefit. Options A, B, and D describe unrelated or incorrect behaviors.Final Answer:
They allow calculations over a subset of rows without collapsing the data. -> Option AQuick Check:
Window functions keep all rows while calculating [OK]
- Thinking window functions remove rows
- Confusing window functions with filtering
- Assuming window functions only work on numbers
Solution
Step 1: Recall rolling mean syntax
The correct syntax uses the rolling() method on the Series, then calls mean(): df['col'].rolling(3).mean()Step 2: Check each option
df['col'].rolling(3).mean() matches the correct syntax. Options B, C, and D misuse method calls or order.Final Answer:
df['col'].rolling(3).mean() -> Option BQuick Check:
rolling() then mean() is correct order [OK]
- Using square brackets with rolling
- Calling mean() before rolling()
- Passing rolling window size inside mean()
import pandas as pd
df = pd.DataFrame({'value': [10, 20, 30, 40, 50]})
df['rolling_sum'] = df['value'].rolling(3).sum()
print(df)What is the output of the
rolling_sum column?Solution
Step 1: Understand rolling sum with window=3
Rolling sum with window 3 sums current and previous 2 rows. First two rows have less than 3 values, so result is NaN.Step 2: Calculate sums
Row 3: 10+20+30=60, Row 4: 20+30+40=90, Row 5: 30+40+50=120Final Answer:
[NaN, NaN, 60.0, 90.0, 120.0] -> Option CQuick Check:
Rolling sum skips incomplete windows [OK]
- Expecting sums for first two rows
- Confusing rolling sum with cumulative sum
- Ignoring NaN for incomplete windows
df['rank'] = df['score'].rolling(3).rank()
Solution
Step 1: Check rolling and rank compatibility
The rolling() method returns a Rolling object that supports aggregation functions like sum(), mean(), rank(), etc.Step 2: Identify correct statement
rolling() supports rank() directly. The other options describe incorrect requirements or unrelated behaviors.Final Answer:
rolling() supports rank() directly. -> Option DQuick Check:
rank() is valid on rolling objects [OK]
- Thinking rank() is not supported directly on rolling
- Trying to pass window size to rank()
- Confusing rolling with groupby
Solution
Step 1: Understand the goal
You want a moving average over 7 days that keeps all original rows (days) in the DataFrame.Step 2: Evaluate methods
rolling(7).mean() calculates the moving average using a sliding window and keeps all rows. groupby() aggregates and reduces rows. resample() changes frequency and may drop days. cumsum() is cumulative sum, not average.Final Answer:
Userolling(7).mean()because it calculates moving averages without dropping rows. -> Option AQuick Check:
rolling().mean() keeps all rows with moving average [OK]
- Using groupby which reduces rows
- Using resample which changes data frequency
- Confusing cumulative sum with moving average
Ready to prove it?
Pass the test and this pattern moves unknown
