部分文字列条件に基づいてグループ内の次の行を取得しようとしています。
以下のコードは、グループ化条件を無視しています。
df_shifted_rows = df[df.groupby(['id'])\
['url'].apply(lambda x: x.str.contains("confirmation"))\
.shift(1).fillna(False)]
現在のグループの一致する値が最後の行にある場合、シフトによって null が返されます。しかし、それは次のグループに移動し、次のグループの最初の値を与えています。