# pandas.Series.shift

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

  Shift index by desired number of periods with an optional time freq.

  When freq is not passed, shift the index without realigning the data. If freq is passed (in this case, the index must be date or datetime, or it will raise a NotImplementedError), the index will be increased using the periods and the freq. freq can be inferred when specified as “infer” as long as either freq or inferred_freq attribute is set in the index.

  Parameters
    periods int

      Number of periods to shift. Can be positive or negative.

    freq DateOffset, tseries.offsets, timedelta, or str, optional

      Offset to use from the tseries module or time rule (e.g. ‘EOM’). If freq is specified then the index values are shifted but the data is not realigned. That is, use freq if you would like to extend the index when shifting and preserve the original data. If freq is specified as “infer” then it will be inferred from the freq or inferred_freq attributes of the index. If neither of those attributes exist, a ValueError is thrown.

    axis{0 or ‘index’, 1 or ‘columns’, None}, default None

      Shift direction.

    fill_value object, optional

      The scalar value to use for newly introduced missing values. the default depends on the dtype of self. For numeric data, `np.nan` is used. For datetime, timedelta, or period data, etc. `NaT` is used. For extension dtypes, `self.dtype.na_value` is used.

      Changed in version 1.1.0.

  Returns
    Series

      Copy of input object, shifted.

  See also

  `Index.shift`

    Shift values of Index.

  `DatetimeIndex.shift`

    Shift values of DatetimeIndex.

  `PeriodIndex.shift`

    Shift values of PeriodIndex.

  `tshift`

    Shift the time index, using the index’s frequency if available.

  Examples

      >>> df = pd.DataFrame({"Col1": [10, 20, 15, 30, 45],
      ...                    "Col2": [13, 23, 18, 33, 48],
      ...                    "Col3": [17, 27, 22, 37, 52]},
      ...                   index=pd.date_range("2020-01-01", "2020-01-05"))
      >>> df
                  Col1  Col2  Col3
      2020-01-01    10    13    17
      2020-01-02    20    23    27
      2020-01-03    15    18    22
      2020-01-04    30    33    37
      2020-01-05    45    48    52

      >>> df.shift(periods=3)
                  Col1  Col2  Col3
      2020-01-01   NaN   NaN   NaN
      2020-01-02   NaN   NaN   NaN
      2020-01-03   NaN   NaN   NaN
      2020-01-04  10.0  13.0  17.0
      2020-01-05  20.0  23.0  27.0

      >>> df.shift(periods=1, axis="columns")
                  Col1  Col2  Col3
      2020-01-01   NaN    10    13
      2020-01-02   NaN    20    23
      2020-01-03   NaN    15    18
      2020-01-04   NaN    30    33
      2020-01-05   NaN    45    48

      >>> df.shift(periods=3, fill_value=0)
                  Col1  Col2  Col3
      2020-01-01     0     0     0
      2020-01-02     0     0     0
      2020-01-03     0     0     0
      2020-01-04    10    13    17
      2020-01-05    20    23    27

      >>> df.shift(periods=3, freq="D")
                  Col1  Col2  Col3
      2020-01-04    10    13    17
      2020-01-05    20    23    27
      2020-01-06    15    18    22
      2020-01-07    30    33    37
      2020-01-08    45    48    52

      >>> df.shift(periods=3, freq="infer")
                  Col1  Col2  Col3
      2020-01-04    10    13    17
      2020-01-05    20    23    27
      2020-01-06    15    18    22
      2020-01-07    30    33    37
      2020-01-08    45    48    52