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.