Pandas: Using DataFrame.resample() method (with examples)

Updated: February 20, 2024 By: Guest Contributor Post a comment

Introduction

In the world of data analysis with Python, Pandas stands out as one of the most popular and useful libraries, providing a range of methods to efficiently deal with time series data, among others. The resample() method is a powerful feature that allows you to change the frequency of your time series data. This tutorial will walk you through using the resample() method in Pandas with comprehensive examples, helping you master the technique from basic to advanced applications.

Working with the resample() Method

Before diving into examples, it’s essential to understand what resample() does. It is used to convert a time series dataset from one frequency to another, aggregating or computing summary statistics over regular time intervals. This can be daily, monthly, annually, or even minutely data, depending on your need.

Setting Up Your Environment

Ensure you have Python and Pandas installed:

pip install pandas

Creating a Time Series DataFrame

Let’s start by creating a simple time series data.

import pandas as pd
import numpy as np

dates = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
data = np.random.rand(len(dates))
df = pd.DataFrame(data, index=dates, columns=['Random Data'])
print(df.head())

This DataFrame df consists of random data indexed by every day of 2023.

Basic Resampling: Aggregating Daily to Monthly Data

Assuming you want to analyze this data on a monthly basis rather than daily, you can resample it like so:

monthly_resampled_data = df.resample('M').mean()
print(monthly_resampled_data.head())

This gives you the average of daily data for each month.

Applying Different Aggregation Functions

With resample(), you’re not limited to calculating averages; you can apply various aggregation functions. For instance, to get the sum:

monthly_sum = df.resample('M').sum()
print(monthly_sum.head())

Or the maximum value of each month:

monthly_max = df.resample('M').max()
print(monthly_max.head())

And so on for min(), std(), etc.

Advanced: Custom Resampling Functions

Sometimes the built-in aggregation functions are not sufficient, and you might need to apply custom operations. Pandas allows you to do that using the apply() method along with resample().

def custom_resample(array):
    return np.percentile(array, 75)

quartile_resampled_data = df.resample('M').apply(custom_resample)
print(quartile_resampled_data.head())

This code snippet calculates the 75th percentile for each month’s data.

Upsampling and Interpolation

While the examples so far have covered downsampling (from a higher to a lower frequency), resample() can also be used for upsampling, though you may need interpolation to fill up the missing values.

daily_to_hourly = df.resample('H').asfreq()
print(daily_to_hourly.head(24))

For interpolation:

daily_to_hourly.interpolate(method='time', inplace=True)
print(daily_to_hourly.head(24))

This smoothly fills in the missing hourly values based on the daily data.

Conclusion

Throughout this guide, we’ve explored the versatility and power of the resample() method in Pandas, from fundamental aggregation to advanced custom operations and upsampling. Mastering resample() adds a powerful tool to your data analysis arsenal, enabling you to handle time series data more effectively and efficiently.