我有一个熊猫数据框,如下所示:
ID | 日期 | 地位 |
---|---|---|
10 | 2022-01-01 | 0 |
10 | 2022-01-02 | 0 |
10 | 2022-01-03 | 1 |
10 | 2022-01-04 | 1 |
10 | 2022-01-05 | 1 |
23 | 2022-02-02 | 0 |
23 | 2022-02-03 | 0 |
23 | 2022-02-04 | 1 |
23 | 2022-02-05 | 1 |
23 | 2022-02-06 | 1 |
我想按 ID 分组,状态的第一个日期等于 1。
预期输出:
ID | 日期 | 地位 | first_status |
---|---|---|---|
10 | 2022-01-03 | 1 | 2022-01-03 |
23 | 2022-02-03 | 1 | 2022-02-03 |
在此之后,我会将这个新的 DF 与以前的 DF 合并。最终DF:
ID | 日期 | 地位 | first_status |
---|---|---|---|
10 | 2022-01-01 | 0 | 2022-01-03 |
10 | 2022-01-02 | 0 | 2022-01-03 |
10 | 2022-01-03 | 1 | 2022-01-03 |
10 | 2022-01-04 | 1 | 2022-01-03 |
10 | 2022-01-05 | 1 | 2022-01-03 |
23 | 2022-02-02 | 0 | 2022-02-04 |
23 | 2022-02-03 | 0 | 2022-02-04 |
23 | 2022-02-04 | 1 | 2022-02-04 |
23 | 2022-02-05 | 1 | 2022-02-04 |
23 | 2022-02-06 | 1 | 2022-02-04 |
我尝试了很多方法来做到这一点,但都不成功
获取每个 ID 的 status=1 的第一个日期。然后将每个 ID 映射到第一个日期:
#convert to datetime if needed
df["date"] = pd.to_datetime(df["date"])
df["first_status"] = df["ID"].map(df[df["status"].eq(1)].groupby("ID")["date"].min())
>>> df
ID date status first_status
0 10 2022-01-01 0 2022-01-03
1 10 2022-01-02 0 2022-01-03
2 10 2022-01-03 1 2022-01-03
3 10 2022-01-04 1 2022-01-03
4 10 2022-01-05 1 2022-01-03
5 23 2022-02-02 0 2022-02-04
6 23 2022-02-03 0 2022-02-04
7 23 2022-02-04 1 2022-02-04
8 23 2022-02-05 1 2022-02-04
9 23 2022-02-06 1 2022-02-04
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句