【python】連番ごとの最大値を新たな列に割り当てる

実現したいこと

コード作成の初心者です。
以下にある【df】の「stay」列の連番ごとの最大値を新たな列「stay_sum」に割り当てたく、
その方法を色々と検索し試みたのですが、うまくいかず、行き詰っています。
知見のある方、ご教示いただけないでしょうか。

【df】
id  |  date  |  stay  |
A1   20231102   1
A1   20231103   2
A1   20231104   3 →連番の最大値
A1   20231119   1
A1   20231120   2
A1   20231121   3
A1   20231123   4 →連番の最大値
B2   20231105   1
B2   20231106   2
B2   20231107   3 →連番の最大値
B2   20231122   1
B2   20231123   2 →連番の最大値

        ↓
【実現したいこと】
id  |  date  |  stay  |  stay_sum  |
A1   20231102   1       3
A1   20231103   2       3
A1   20231104   3       3
A1   20231119   1       4
A1   20231120   2       4
A1   20231121   3       4
A1   20231123   4       4
B2   20231105   1       3
B2   20231106   2       3
B2   20231107   3       3
B2   20231122   1       2
B2   20231123   2       2

発生している問題・分からないこと

同一idの連番ごとの最大値をあたらな列に割り当てたいのですが、うまくいきません。

該当のソースコード

df["stay_sum] = (df["stay"] != df["stay"].shift()+1).cumsum()

試したこと・調べたこと

上記の詳細・結果

①df["stay_sum] = (df["stay"] != df["stay"].shift()+1).cumsum()の出力結果
id  |  date  |  stay  |  stay_sum  |
A1   20231102   1       1
A1   20231103   2       1
A1   20231104   3       1
A1   20231119   1       2
A1   20231120   2       2
A1   20231121   3       2
A1   20231123   4       2
B2   20231105   1       3
B2   20231106   2       3
B2   20231107   3       3
B2   20231122   1       4
B2   20231123   2       4

②uuid毎にgroupbyで「stay」列のmax値を取得して、このmax値を【df】のuuidでmergeすることを考えましたが、このmax値は同一idの連番ごとの最大値ではなく、各idの「stay」の最大値を取得するため、【実現したいこと】とは異なり、行き詰っています。
df.loc[df.groupby("uuid)["stay].idxmax(),:]

補足

特になし

コメントを投稿

0 コメント