计算自上次事件Pyspark以来的天数



这个问题之前已经为R回答过了。我想完全这样做,但要使用pyspark。

对的最新事件编制索引

last_event_index <- cumsum(df$event) + 1

将其向右移动一

last_event_index <- c(1, last_event_index[1:length(last_event_index) - 1])

获取事件的日期并用CCD_ 1对向量进行索引,#添加了一个NA作为第一个日期,因为没有事件

last_event_date <- c(as.Date(NA), df[which(df$event==1), "date"])[last_event_index]

#将事件的日期减去最后一个事件的日期

df$tae <- df$date - last_event_date
df
|        date |event |     tae|
|-------------|------|-------|
|#1 2000-07-06|     0|  NA days
|#2 2000-09-15|     0|  NA days
|#3 2000-10-15|     1|  NA days
|#4 2001-01-03|     0|  80 days
|#5 2001-03-17|     1| 153 days
|#6 2001-05-23|     1|  67 days
|#7 2001-08-26|     0|  95 days

使用Windowlast函数获取上一个事件日期,然后获取具有当前行日期的datediff

from pyspark.sql import functions as F, Window
w = Window.orderBy("date").rowsBetween(Window.unboundedPreceding, -1)
result = df.withColumn(
"last_event_date",
F.last(F.when(F.col("event") == 1, F.col("date")), ignorenulls=True).over(w)
).withColumn(
"tae",
F.concat(
F.coalesce(F.datediff("date", "last_event_date"), F.lit("NA")),
F.lit(" days")
)
).drop("last_event_date")
result.show()
#+----------+-----+--------+
#|      date|event|     tae|
#+----------+-----+--------+
#|2000-07-06|    0| NA days|
#|2000-09-15|    0| NA days|
#|2000-10-15|    1| NA days|
#|2001-01-03|    0| 80 days|
#|2001-03-17|    1|153 days|
#|2001-05-23|    1| 67 days|
#|2001-08-26|    0| 95 days|
#+----------+-----+--------+

相关内容

  • 没有找到相关文章

最新更新