DataFrame.shift() / Series.shift()

Метод shift() сдвигает значения по оси (вперёд или назад) на указанное число позиций. Освободившиеся позиции заполняются NaN или значением из fill_value. Применяется для расчёта разностей, лагов и сравнений с предыдущим состоянием.

Сигнатура

DataFrame.shift(periods=1, freq=None, axis=0, fill_value=NoDefault,
                suffix=None)

Параметры

  • periods — число позиций; положительное — вниз/вправо, отрицательное — вверх/влево.

  • freq — сдвиг индекса (для временных рядов).

  • axis — ось сдвига.

  • fill_value — заполнитель для появившихся пропусков.

Возвращаемое значение

Новый DataFrame / Series той же формы.

Примеры

Пример 1. Сдвиг на 1 вниз

import pandas as pd

s = pd.Series([10, 20, 30, 40])
print(s.shift(1))
0     NaN
1    10.0
2    20.0
3    30.0
dtype: float64

Пример 2. Разность с предыдущим (текущее − лаг)

import pandas as pd

s = pd.Series([22.0, 22.4, 23.0, 23.1])
print(s - s.shift(1))
0    NaN
1    0.4
2    0.6
3    0.1
dtype: float64

Пример 3. Сдвиг на -1 (вверх)

import pandas as pd

s = pd.Series([10, 20, 30])
print(s.shift(-1))
0    20.0
1    30.0
2     NaN
dtype: float64

Пример 4. fill_value=0

import pandas as pd

s = pd.Series([10, 20, 30])
print(s.shift(1, fill_value=0))
0     0
1    10
2    20
dtype: int64

Пример 5. Лаг по DataFrame

import pandas as pd

df = pd.DataFrame({"temp": [22, 23, 25, 24]})
df["temp_prev"] = df["temp"].shift(1)
df["delta"] = df["temp"] - df["temp_prev"]
print(df)
   temp  temp_prev  delta
0    22        NaN    NaN
1    23       22.0    1.0
2    25       23.0    2.0
3    24       25.0   -1.0

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.