# pandas.Series.shift() method: A detailed guide (with examples)

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

## Introduction

The `pandas.Series.shift()` method is an invaluable tool in the arsenal of data manipulation techniques available for Python programmers, especially when dealing with time series data. This method allows for the shifting of data in a Series either forward or backward, facilitating operations like difference computations or moving average calculations. In this guide, we delve into the intricacies of using this method, aided by a series of examples escalating from basic to advanced usage scenarios.

## Understanding the `shift()` Method

The `shift()` method in pandas allows the elements in a Series to be shifted along the index. Its primary syntax is as follows:

``````Series.shift(periods=1, freq=None, axis=0, fill_value=None)
``````

Here, the `periods` parameter indicates the number of periods to shift, which can be positive (shifting forward) or negative (shifting backward). The `freq` parameter is optionally used to specify a frequency when the shift should consider a specific time offset, particularly useful in time series data. The `axis` parameter is for compatibility with DataFrame method calls and is not typically used with Series. Lastly, `fill_value` specifies the value to fill the empty positions created by shifting.

## Basic Examples

Letâ€™s start with the basics. Consider a pandas Series:

``````import pandas as pd

s = pd.Series([1, 2, 3, 4, 5])
print(s.shift(1))
``````

Output:

``````0    NaN
1    1.0
2    2.0
3    3.0
4    4.0
dtype: float64
``````

Here, each element is shifted one position forward, introducing `NaN` at the start. This is the simplest form of shifting data. Conversely, shifting the data backward looks like this:

``````print(s.shift(-1))
``````

Output:

``````0    2.0
1    3.0
2    4.0
3    5.0
4    NaN
dtype: float64
``````

Moving on to a slightly more complex scenario, consider filling the empty positions with a specific value:

``````print(s.shift(2, fill_value=0))
``````

Output:

``````0    0.0
1    0.0
2    1.0
3    2.0
4    3.0
dtype: float64
``````

## Time Series Data

Shifting time series data introduces the opportunity to use the `freq` parameter, which can adjust for specific time frequencies. Hereâ€™s an example using a DatetimeIndex:

``````dates = pd.date_range('20230101', periods=5)
s = pd.Series([1, 2, 3, 4, 5], index=dates)
print(s.shift(1, freq='D'))
``````

Output:

``````2023-01-02    1
2023-01-03    2
2023-01-04    3
2023-01-05    4
2023-01-06    5
dtype: int64
``````

In this case, instead of the values being shifted within the original time range, the entire index is shifted forward by one day.

Moving to more advanced examples, letâ€™s explore the use of `shift()` in computing differences and generating moving averages, common tasks in financial data analysis and other time series applications.

### Calculating Differences

To compute the difference between successive elements in a Series, you can subtract the shifted Series from the original:

``````diff_s = s - s.shift(1)
print(diff_s)
``````

Output:

``````2023-01-01    NaN
2023-01-02    1.0
2023-01-03    1.0
2023-01-04    1.0
2023-01-05    1.0
dtype: float64
``````

### Calculating Moving Averages

For a moving average, you might combine the `shift()` method with rolling average calculations. Hereâ€™s how:

``````# Let's calculate a 3-day moving average
s_rolling = s.rolling(window=3).mean()
print(s_rolling.shift(1))
``````

Output:

``````2023-01-01    NaN
2023-01-02    NaN
2023-01-03    2.0
2023-01-04    3.0
2023-01-05    4.0
dtype: float64
``````

## Conclusion

The `pandas.Series.shift()` method provides powerful and flexible options for manipulating time series and other forms of sequential data. Through shifting data points in time, one can perform various analyses, including calculating differences and moving averages, critical in numerous data analysis and machine learning scenarios. Understanding and employing this tool effectively can greatly enhance data analysis capabilities.

Search tutorials, examples, and resources