---
title: "Smoothing time series in Pandas"
description: "How to use the exponentially weighted window functions in Pandas"
author: "Bartosz Mikulski"
author_bio: "Principal AI Engineer & MLOps Architect. I bridge the gap between \"it works in a notebook\" and \"it works for 200 million users.\""
author_url: https://mikulskibartosz.name
author_linkedin: https://www.linkedin.com/in/mikulskibartosz/
author_github: https://github.com/mikulskibartosz
canonical_url: https://mikulskibartosz.name/smoothing-time-series-in-pandas
---

To make time series data more smooth in Pandas, we can use the exponentially weighted window functions and calculate the exponentially weighted average.

First, I am going to load a dataset which contains Bitcoin prices recorded every minute.

```
data = pd.read_csv('../input/bitstampUSD_1-min_data_2012-01-01_to_2019-03-13.csv')
data['date'] = pd.to_datetime(data['Timestamp'], unit="s")

input_data = data[["date", "Close"]]

subset = input_data[input_data["date"] >= "2019-01-01"]
subset.set_index('date', inplace=True)
```

I want to plot their daily weighted average, so I must compress 3600 values into one using this function:

```
subset['Close'].ewm(span = 3600).mean()
```

We see that by default the adjusted version of the weighted average function is used, so the first element of the time series is not 0.

Finally, I can plot the original data and both the smoothed time series:

```
subset['Close'].plot(style = 'r--', label = 'Bitcoin prices')
subset['Close'].ewm(span = 3600).mean().plot(style = 'b', label = ' Exponential moving average')

plt.legend()
plt.title("Bitcoin prices")
plt.xlabel('Date')
plt.ylabel('Price (USD)')
```

![Bitcoin prices and exponential moving average](/images/2019-04-24-smoothing-time-series-in-pandas/graph.png)