如果在 pyspark 数据帧中后跟连续 5 个“0”,则在条件下获取第一个“1”

Posted

技术标签:

【中文标题】如果在 pyspark 数据帧中后跟连续 5 个“0”,则在条件下获取第一个“1”【英文标题】:Get the first '1's on condition if it followed by consecutive 5 '0's in pyspark dataframe 【发布时间】:2018-03-05 16:16:58 【问题描述】:

我有一个 pyspark 数据框,在 user_id 上每个月的事件列分别为 0 和 1。我需要将事件选择为 1,它必须具有完全可渗透的行作为 5 0。如果这个条件满足,那么只得到第一个 1?实际识别 5 个 0 和下一个 1 的模式

我尝试使用排名,但它不适用于我的整个数据集。任何输入都会有所帮助。

例如。如果您的数据框为:

 df:
 user_id   event
   1         0   
   1         0
   1         0
   1         0
   1         0
   1         1

现在我需要在我的数据集中找出这种模式,它可以在我的具有特定用户 ID 的数据集记录的地方使用。至于用户 ID,我最多可以有 48 条记录,我需要找到这样的模式组。在这之间,如果出现 1,那么我不感兴趣。

【问题讨论】:

【参考方案1】:

我不知道您要在这里实现什么,但是通过提供的输入数据,您可以获得事件的补码,然后在当前行前 5 行的窗口中找到累积和。 检查一下并告诉我,

>>> df.show()
+---+-----+
| id|event|
+---+-----+
|  1|    0|
|  1|    0|
|  1|    0|
|  1|    0|
|  1|    0|
|  1|    1|
|  1|    1|
|  1|    1|
|  2|    1|
|  2|    0|
|  2|    0|
|  2|    0|
|  2|    0|
|  2|    0|
|  2|    1|
+---+-----+

>>> df = df.withColumn('r_event',F.when(df.event == 0,1).otherwise(0))
>>> w = Window.partitionBy('id').orderBy('id').rowsBetween(-5,-1)
>>> df = df.withColumn('c_sum',F.sum('r_event').over(w))
>>> df.show()
+---+-----+-------+-----+
| id|event|r_event|c_sum|
+---+-----+-------+-----+
|  1|    0|      1| null|
|  1|    0|      1|    1|
|  1|    0|      1|    2|
|  1|    0|      1|    3|
|  1|    0|      1|    4|
|  1|    1|      0|    5|
|  1|    1|      0|    4|
|  1|    1|      0|    3|
|  2|    1|      0| null|
|  2|    0|      1|    0|
|  2|    0|      1|    1|
|  2|    0|      1|    2|
|  2|    0|      1|    3|
|  2|    0|      1|    4|
|  2|    1|      0|    5|
+---+-----+-------+-----+

>>> df.where(df.c_sum == 5).select('id','event').show()
+---+-----+
| id|event|
+---+-----+
|  1|    1|
|  2|    1|
+---+-----+ 

【讨论】:

很高兴知道!!

以上是关于如果在 pyspark 数据帧中后跟连续 5 个“0”,则在条件下获取第一个“1”的主要内容,如果未能解决你的问题,请参考以下文章

编写一个python函数在pyspark数据帧中自动执行数据标记

删除 pyspark 数据帧中的空格

如果 pyspark 数据帧的行基于两列的值位于另一个数据帧中,如何删除它们?

从具有 DenseVector 行的 pyspark 数据帧中获取行的最大值

如何比较pyspark中两个不同数据帧中的两列

当 ID 匹配时,在其他 Pyspark 数据帧中按列划分 Pyspark 数据帧列