IIU C:
import pandas as pd
import numpy as np
df=pd.DataFrame({"x": [1,1,1,2,2], "y": [1,3,5,1,2]})
df["rep"]=np.where(df["y"].lt(df["y"].shift(-1)),df["y"].shift(-1).sub(df["y"]).sub(1), 0)
df=df.loc[df.index.repeat(df["rep"].add(1))]
df["y"]=df["y"].add(df.groupby(level=0)["y"].cumcount())
df["rep"]=df.groupby(level=0)["y"].cumcount().lt(1).astype(int)
df=df.reset_index(drop=True)
И выход, который вы ищете:
>>> print(df["rep"].T.tolist())
[1, 0, 1, 0, 1, 1, 1]
>>> print(df)
x y rep
0 1 1 1
1 1 2 0
2 1 3 1
3 1 4 0
4 1 5 1
5 2 1 1
6 2 2 1