実現したいこと
コード作成の初心者です。
以下にある【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 コメント