在Pyspark中保留dataframe中一行的派生值,并在nex中进行比较

2024-05-28 20:49:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据集如下所示:

Txn_date    Ep_end_dt
31-Dec-17   30-Dec-17
30-Dec-17   28-Dec-17
28-Dec-17   27-Dec-17
27-Dec-17   26-Dec-17
26-Dec-17   24-Dec-17
25-Dec-17   23-Dec-17
24-Dec-17   23-Dec-17
23-Dec-17   21-Dec-17

txn日期和ep\u end\u dt组合应归类为非重叠事件,如下表所示:

Txn_date    Ep_end_dt   Episode
31-Dec-17   30-Dec-17   1
30-Dec-17   28-Dec-17   0
28-Dec-17   27-Dec-17   1
27-Dec-17   26-Dec-17   0
26-Dec-17   24-Dec-17   1
25-Dec-17   23-Dec-17   0
24-Dec-17   23-Dec-17   0
23-Dec-17   21-Dec-17   1

31到30是一集,而30到28不是因为第一个间隔已经包含30,28到27是一集,但27到26不是因为27已经包含在间隔28到27中,依此类推。显然,生成的事件标志取决于上一个间隔是否被分类为事件。你知道吗

我需要在Pypark实现这一点。我已经有一个月没有开始研究Pyspark了。我试图定义一个基于txn\u date和ep\u end\u dt的延迟的规则

df.withColumn("lag_txn",lag(txn_date,1))\
.withColumn("lag_ep_end_dt",lag(ep_end_Dt,1))

我尝试了不同的滞后顺序,以便得出基于滞后的规则。然而,由于它没有考虑到前一集的创建,所以我无法得到任何虚拟变量的组合。你知道吗

我尝试过循环和递归。然而,在Pyspark中,我得到了一个运行时错误,因为通过递归达到最大深度,而loop给了我一个超时错误。有人能帮我解决这个问题吗?你知道吗


Tags: date间隔规则错误dt事件decpyspark

热门问题