我对蟒蛇还很陌生。我正在尝试创建一个 python 代码来提取最早的提取作为开始时间。当条件变为 Y 时,我想根据条件创建结束日期:
样本数据表:
身份证 | 子ID | 提取日期 | 满足条件(是/否) |
---|---|---|---|
1 | x | 2023-01-02 | N |
1 | y | 2023-01-02 | N |
1 | x | 2023-02-15 | N |
2 | v | 2023-02-15 | N |
2 | z | 2023-02-15 | N |
1 | x | 2023-03-15 | 是 |
2 | v | 2023-03-15 | 是 |
我尝试了几种方法来提取数据,但运气不佳:
df['start date'] = df.groupby(['ID','SUB ID'], as_index = False)['Extraction Date].transform(min).reset_index()
df['start date'] = df.groupby(['ID','SUB ID'], as_index = False)['Extraction Date].min()
df['end date'] = df.query(Condition met (Y/N) == Y).groupby(['ID','SUB ID'], as_index = False['Extraction Date].transform(max).reset_index()
df['end date'] = df.query(Condition met (Y/N) == Y).groupby(['ID','SUB ID'], as_index = False['Extraction Date].min()
我想要得到什么:
身份证 | 子ID | 提取日期 | 满足条件(是/否) | 开始日期 | 结束日期 |
---|---|---|---|---|---|
1 | x | 2023-01-02 | N | 2023-01-02 | 不适用 |
1 | y | 2023-01-02 | N | 2023-01-02 | 不适用 |
1 | x | 2023-02-15 | N | 2023-01-02 | 不适用 |
2 | v | 2023-02-15 | N | 2023-02-15 | 不适用 |
2 | z | 2023-02-15 | N | 2023-02-15 | 不适用 |
1 | x | 2023-03-15 | 是 | 2023-01-02 | 2023-03-15 |
2 | v | 2023-03-15 | 是 | 2023-02-15 | 2023-03-15 |
您可以使用
groupby
和 transform("min")
来获取 Start Date
,使用 loc
来获取 End Date
:
df["Start Date"] = df.groupby(["ID", "SUB ID"])["Extraction Date"].transform("min")
df.loc[df["Condition met (Y/N)"] == "Y", "End Date"] = df["Extraction Date"]
ID SUB ID Extraction Date Condition met (Y/N) Start Date End Date
0 1 x 2023-01-02 N 2023-01-02 NaT
1 1 y 2023-01-02 N 2023-01-02 NaT
2 1 x 2023-02-15 N 2023-01-02 NaT
3 2 v 2023-02-15 N 2023-02-15 NaT
4 2 z 2023-02-15 N 2023-02-15 NaT
5 1 x 2023-03-15 Y 2023-01-02 2023-03-15
6 2 v 2023-03-15 Y 2023-02-15 2023-03-15