📖 Scenario: You work for a bike rental company. You have a dataset of bike rentals recorded every minute. You want to analyze the total rentals per hour for each bike station.
🎯 Goal: Build a program that groups bike rental data by station and resamples the data to show total rentals per hour for each station.
📋 What You'll Learn
Create a pandas DataFrame with datetime index and rental counts for each station
Create a variable for the resampling frequency
Use groupby on the station column and resample the data by the frequency
Print the final resampled DataFrame showing total rentals per hour per station
💡 Why This Matters
🌍 Real World
Bike rental companies analyze rental data by time and location to optimize bike availability and station management.
💼 Career
Data analysts and data scientists often resample time series data grouped by categories to find trends and summaries for business decisions.
Progress0 / 4 steps
1
Create the bike rental data
Create a pandas DataFrame called df with these columns: 'station', 'rentals'. Use the datetime index with these exact timestamps: '2024-06-01 08:00', '2024-06-01 08:01', '2024-06-01 08:02', '2024-06-01 09:00', '2024-06-01 09:01'. The data should have these rows exactly: station: 'A', 'A', 'B', 'A', 'B' rentals: 5, 3, 2, 4, 1
Pandas
Hint
Use pd.to_datetime to create the datetime index. Then create the DataFrame df with the given data and index.
2
Set the resampling frequency
Create a variable called freq and set it to the string 'H' to represent hourly resampling.
Pandas
Hint
Set freq to the string 'H' for hourly resampling.
3
Group by station and resample hourly
Create a new DataFrame called hourly_rentals by grouping df by the 'station' column and resampling the 'rentals' column by the frequency freq. Use sum() to add rentals in each hour.
Pandas
Hint
Use df.groupby('station').resample(freq).sum() to get total rentals per hour per station.
4
Print the hourly rentals result
Print the hourly_rentals DataFrame to display the total rentals per hour for each station.
Pandas
Hint
Use print(hourly_rentals) to show the grouped and resampled data.
Practice
(1/5)
1. What is the main purpose of using resample in pandas when working with time series data?
easy
A. To change the frequency of time-based data, like converting daily data to monthly data.
B. To sort data alphabetically by column values.
C. To merge two DataFrames based on a common key.
D. To filter rows based on a condition.
Solution
Step 1: Understand the function of resample
Resample is used to change the time frequency of data, such as converting daily data into monthly or weekly data.
Step 2: Compare with other options
Sorting, merging, and filtering are different pandas operations unrelated to resampling.
Final Answer:
To change the frequency of time-based data, like converting daily data to monthly data. -> Option A
Quick Check:
Resample changes time frequency = A [OK]
Hint: Resample changes time intervals, not sorting or filtering [OK]
Common Mistakes:
Confusing resample with sort or filter
Thinking resample merges data
Using resample without datetime index
2. Which of the following is the correct way to resample a DataFrame df by month after grouping by a column 'category' and assuming 'date' is the datetime index?
easy
A. df.resample('M').groupby('category').mean()
B. df.groupby('category').resample('M')
C. df.groupby('category').resample('M').mean()
D. df.resample('M').mean().groupby('category')
Solution
Step 1: Understand groupby and resample order
To resample within each group, first group by the column, then resample the datetime index inside each group.
Step 2: Check syntax correctness
df.groupby('category').resample('M').mean() correctly uses df.groupby('category').resample('M').mean(). Other options have wrong order or missing aggregation.
Final Answer:
df.groupby('category').resample('M').mean() -> Option C
Quick Check:
Group then resample = B [OK]
Hint: Group first, then resample on datetime index [OK]
Common Mistakes:
Resampling before grouping
Missing aggregation after resample
Not setting datetime as index before resampling
3. Given the following code, what will be the output?
A. An error because resample cannot be used after groupby.
B. A DataFrame with daily sums of 'value' for each category.
C. A DataFrame grouped by category only, ignoring dates.
D. A DataFrame with monthly sums of 'value' for each category, indexed by category and month end date.
Solution
Step 1: Understand the code flow
The DataFrame is grouped by 'category', then resampled monthly on the datetime index, summing 'value' within each month and category.
Step 2: Analyze the output structure
The result will have a MultiIndex with 'category' and the resampled month-end dates, showing sums per group per month.
Final Answer:
A DataFrame with monthly sums of 'value' for each category, indexed by category and month end date. -> Option D
Quick Check:
Group + monthly resample sum = C [OK]
Hint: Group then resample sums per month per group [OK]
Common Mistakes:
Expecting daily sums instead of monthly
Thinking resample causes error after groupby
Ignoring the datetime index requirement
4. You run this code but get an error:
df.groupby('category').resample('W').mean()
What is the most likely cause of the error?
medium
A. The 'category' column contains null values.
B. The 'date' column is not set as the DataFrame index before resampling.
C. The resample frequency 'W' is invalid.
D. You cannot use mean() after resample.
Solution
Step 1: Check resample requirements
Resample requires a datetime index. If 'date' is a column but not index, resample fails.
Step 2: Analyze error cause
Most common error is forgetting to set 'date' as index before resampling.
Final Answer:
The 'date' column is not set as the DataFrame index before resampling. -> Option B
Quick Check:
Datetime index missing causes resample error = A [OK]
Hint: Set datetime column as index before resample [OK]
Common Mistakes:
Not setting datetime index
Assuming resample frequency is wrong
Thinking aggregation like mean() is invalid
5. You have a DataFrame df with columns 'store', 'date' (datetime), and 'sales'. You want to find the total weekly sales per store, but only for weeks where the total sales exceed 1000. Which code snippet correctly does this?
hard
A. df.set_index('date').groupby('store').resample('W').sum().query('sales > 1000')
B. df.groupby('store').resample('W').sum().query('sales > 1000')
C. df.groupby('store').resample('W').sum().filter(lambda x: x['sales'] > 1000)
D. df.set_index('date').resample('W').groupby('store').sum().loc[lambda x: x['sales'] > 1000]
Solution
Step 1: Set datetime index before resampling
Resample requires the datetime column as index, so df.set_index('date') is needed.
Step 2: Group by 'store' then resample weekly and sum sales
Use groupby('store').resample('W').sum() to get weekly sales per store.
Step 3: Filter weeks where sales exceed 1000
Use query('sales > 1000') to keep only those weeks.
Final Answer:
df.set_index('date').groupby('store').resample('W').sum().query('sales > 1000') -> Option A
Quick Check:
Set index, group, resample, filter sales > 1000 = D [OK]
Hint: Set datetime index, group, resample, then filter [OK]
Common Mistakes:
Not setting datetime as index
Wrong order of groupby and resample
Using filter incorrectly instead of query
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.