首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据一组条件编写python函数

如何根据一组条件编写python函数
EN

Stack Overflow用户
提问于 2022-03-08 19:44:37
回答 1查看 55关注 0票数 0

我有数以百计的项目条目,我试图编写一个函数来计算一个项目阶段在给定的一个月内花费的时间。

我有一个项目的条目,每次有一个项目阶段的变化。时钟从月初或StageID为2开始,到月底或StageID为3时结束。

如何使用下面的数据计算项目在StageID 2中在指定的start_date和end_date之间的花费时间?

代码语言:javascript
复制
start_date = pd.to_datetime('2021-07-01 00:00:00.000')
end_date = pd.to_datetime('2021-07-31 23:59:59.999')

df = pd.DataFrame({'ProjectID': [1,1,2,2],
                 'StageID' : [2,3,2,3,],
                 'Date' : ["2021-7-2", "2021-7-28", "2021-7-15", "2021-8-22"]})

我希望结果看起来像:

代码语言:javascript
复制
        ProjectID    DaysPassed
     0      1           26
     1      2           16

奖金问题:

代码语言:javascript
复制
    df = pd.DataFrame({'ProjectID': [1,1,1,1,2,2],
                     'StageID' : [2,3,2,3,2,3,],
                     'Date' : ["2021-7-5", "2021-7-10","2021-7-15","2021-7-20", "2021-7-15", "2021-8-22"]})

预期结果如下所示:

代码语言:javascript
复制
        ProjectID    DaysPassed
     0      1           10
     1      2           16
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-08 20:08:11

IIUC你想:

代码语言:javascript
复制
output = df[df["StageID"].eq(2)].drop("StageID", axis=1).merge(df[df["StageID"].eq(3)].drop("StageID", axis=1), on="ProjectID")
output["DaysPassed"] = output["Date_y"].clip(upper=pd.Timestamp(2021,7,31)).sub(output["Date_x"])
output = output.drop(["Date_x", "Date_y"],axis=1)

>>> df
   ProjectID DaysPassed
0          1    26 days
1          2    16 days

如果您的项目可以有多个迭代,则可以创建一个新列来唯一地标识项目:

代码语言:javascript
复制
df = pd.DataFrame({'ProjectID': [1,1,1,1,2,2], 
                   'StageID' : [2,3,2,3,2,3,], 
                   'Date' : ["2021-7-5", "2021-7-10","2021-7-15","2021-7-20", "2021-7-15", "2021-8-22"]})

df["Date"] = pd.to_datetime(df["Date"])
df["Iteration"] = df.groupby(["ProjectID", "StageID"])["Date"].cumcount()+1
output = df[df["StageID"].eq(2)].drop("StageID", axis=1).merge(df[df["StageID"].eq(3)].drop("StageID", axis=1), on=["ProjectID", "Iteration"])
output["DaysPassed"] = output["Date_y"].clip(upper=pd.Timestamp(2021,7,31)).sub(output["Date_x"]).dt.output = output.drop(["Date_x", "Date_y"],axis=1)

>>> output
   ProjectID  Iteration  DaysPassed
0          1          1           5
1          1          2           5
2          2          1          16
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71400672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档