创建开始和结束日期 - Python

问题描述 投票:0回答:1

我对蟒蛇还很陌生。我正在尝试创建一个 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
python pandas dataframe
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.