Python 统计每月未结案件的数目
我目前正在努力解决一个问题,即使用pyspark计算月末未完成任务的数量。我有一个带有两个时间戳的数据帧(一个用于问题的开始,一个用于问题的结束)。我想在月底统计未解决问题的数量 我的dataframe df1是两个时间戳表(任务开始和结束的时间戳)的合并。让我们假设它如下所示:Python 统计每月未结案件的数目,python,pyspark,Python,Pyspark,我目前正在努力解决一个问题,即使用pyspark计算月末未完成任务的数量。我有一个带有两个时间戳的数据帧(一个用于问题的开始,一个用于问题的结束)。我想在月底统计未解决问题的数量 我的dataframe df1是两个时间戳表(任务开始和结束的时间戳)的合并。让我们假设它如下所示: TaskNumber Start Date StartTimestamp EndDate EndTimestamp EndOfTheMonth 1 2/15/2
TaskNumber Start Date StartTimestamp EndDate EndTimestamp EndOfTheMonth
1 2/15/2019 Start 4/18/2019 End 2/28/2019
2 2/16/2019 Start 2/23/2019 End 2/28/2019
3 2/17/2019 Start 3/4/2019 End 2/28/2019
4 3/1/2019 Start Null Null 3/31/2019
from pyspark.sql.functions import col, when, sum as _sum
from pyspark.sql import functions as F
df2 = df1.withColumn("EndOfTheMonth", last_day("Start Date"))
df3 = (df2.withColumn("OpenTaskAtMonthEnd", when((col("Start Date") <= col("EndOfTheMonth")) & ((col("End Date") >= col("EndOfTheMonth")) |
(col("EndTask").isNull())),1).otherwise(0))
.withColumn("TaskStillOpened", when((col("EndTimestamp").isNull()),1).otherwise(0))
.withColumn("DateofToday", F.current_date())
)
df4 = df3.filter(col("OpenTaskAtMonthEnd") == 1)
.withColumn("Pending Days", when(col("TaskStillOpened") == 1, F.datediff(F.to_date(df3.DateofToday), F.to_date(df3.Start Date))).otherwise(F.datediff(F.to_date(df3.End Date), F.to_date(df3.Start Date))))
dfOpen = (df4.groupBy("EndOfTheMonth")
.agg(_sum(col("OpenTaskAtMonthEnd").alias("NrTotalOpenTasksAtMonthEnd"), _sum(col(TasksStillOpened)).alias("TotalWorkinProgress"))
)
TaskNumber Start Date End Date EndOfTheMonth OpenTaskatMonthEnd TaskStillOpen
1 2/15/2019 4/18/2019 2/28/2019 1 0
2 2/16/2019 2/23/2019 2/28/2019 0 0
3 2/17/2019 3/4/2019 2/28/2019 1 0
4 3/1/2019 Null 3/31/2019 1 1
TaskNumber开始日期StartTimestamp结束日期EndTimestamp结束时间戳EndOfTheMonth
1 2019年2月15日开始2019年4月18日结束2019年2月28日
2019年2月16日开始2019年2月23日结束2019年2月28日
3 2019年2月17日开始2019年3月4日结束2019年2月28日
4 2019年3月1日开始无效2019年3月31日无效
从pyspark.sql.functions导入col、when、sum作为_sum
从pyspark.sql导入函数为F
df2=df1。带列(“结束时间”,最后一天(“开始日期”))
df3=(df2.withColumn(“OpenTaskAtMonthEnd”),when((col(“开始日期”)=col(“EndOfTheMonth”))|
(col(“EndTask”).isNull()),1)。否则(0)
.withColumn(“TaskStillOpened”,当((col(“EndTimestamp”).isNull())为1时)。否则(0)
.withColumn(“DateofToday”,F.current_date())
)
df4=df3.filter(col(“OpenTaskAtMonthEnd”)==1)
。使用列(“待定日期”,当(列(“任务仍然打开”)==1,F.datediff(F.to_日期(df3.DateofToday),F.to_日期(df3.Start date))。否则(F.datediff(F.to_日期(df3.End date date),F.to_日期(df3.Start date)))
dfOpen=(df4.groupBy(“EndOfTheMonth”)
.agg(_sum(col(“OpenTaskAtMonthEnd”).别名(“NrTotalOpenTasksAtMonthEnd”),_sum(col(taskstillopened)).别名(“TotalWorkinProgress”))
)
任务编号开始日期结束日期结束月开放任务月开放任务仍开放
1 2/15/2019 4/18/2019 2/28/2019 1 0
2 2/16/2019 2/23/2019 2/28/2019 0 0
3 2/17/2019 3/4/2019 2/28/2019 1 0
4 2019年3月1日空2019年3月31日1 1
当某个任务在n-1月开始,但仅在n+1月结束时,我无法在n月的打开任务中找到该任务的实际代码
预期的输出实际上是获得每个月以及理想情况下每周的开放任务数
非常感谢您的支持;)请分享您尝试过的代码片段。您还可以解释一下您希望得到什么样的输出吗?一个数据框架,其中包含每月和每年的开放任务?我已经实现了上一篇文章。我希望它更清楚一点。谢谢