获取具有开始时间和结束时间的唯一 ID 计数

阿努吉·古普塔

我有这个数据框

Date  ID
1      A
2      B
3      C
4      D
1      A
2      B
3      C
4      A
1      B
2      A

在其中计算开始日期和结束日期并找到 ID 的唯一计数它只是一个人来是日期 1 和 end_date 是 1 是:

Date Id
1    A
1    A
1    B 

所以唯一用户是2,记录总数是3

我想用column Start_dateEnd_date和唯一计数来创建这个数据框ID

Start_date   End_date  Unique
  1             1        3
  1             2        2
  1             3        3
  1             4        4
  2             2        2 
  2             3        3 
  2             4        4
  3             3        1
  3             4        3
  4             4        2

怎么做?

兰加维尔

这是解决方案

import pyspark.sql.functions as F
from pyspark.sql.types import ArrayType,IntegerType

def date_ranges(start_date,end_date):
    return list(range(start_date,end_date+1))

date_ranges_udf = F.udf(date_ranges, ArrayType(IntegerType()))

df = spark.createDataFrame(
    [(1,'A'),(2,'B'),(3,'C'),(4,'D'),(1,'A'),
    (2,'B'),(3,'C'),(4,'A'), (1,'B'),(2,'A')], ["Date", "ID"])

df_start_end_dates = df.select(
    F.min(F.col('Date')).alias('min_date'),F.max(F.col('Date')).alias('max_date')
).withColumn('start_date',F.col('min_date')).select(
    'start_date',
    F.explode(
        date_ranges_udf(F.col('min_date'),F.col('max_date'))
    ).alias('end_date')
)

cond = [F.col('Date') >= F.col('start_date'), F.col('Date') <= F.col('end_date')]

df_start_end_dates.join(
    df,cond
).groupBy(
    'start_date','end_date'
).agg(
    F.countDistinct('ID').alias('Unique')
).orderBy(
    'start_date','end_date'
).show()

结果

+----------+--------+------+
|start_date|end_date|Unique|
+----------+--------+------+
|         1|       1|     2|
|         1|       2|     2|
|         1|       3|     3|
|         1|       4|     4|
+----------+--------+------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在开始时间和结束时间之间每小时计数

来自分类Dev

在开始时间和结束时间之间每小时计数

来自分类Dev

查询以提供每个会话的源计数、目标计数、开始时间和结束时间等工作流统计信息

来自分类Dev

MYSQL:查找连续计数的开始和结束时间戳记

来自分类Dev

重置唯一ID计数

来自分类Dev

从数据框中获取唯一ID计数的数量,并为计数和值创建新列

来自分类Dev

如何根据Id获取计数

来自分类Dev

每个日期的唯一ID的累计计数

来自分类Dev

按 id 的唯一计数

来自分类Dev

获取视频的开始时间和结束时间

来自分类Dev

如何为具有特定值的重复ID选择唯一ID计数

来自分类Dev

每天获取所有不同ID的计数

来自分类Dev

SAS累计计数(按唯一ID和日期)

来自分类Dev

SQL获取具有相同ID的所有行的计数

来自分类Dev

具有开始时间和结束时间的重复事件的iCal格式

来自分类Dev

具有开始时间和结束时间的SQL事件,转换为小时数

来自分类Dev

安排具有固定开始时间和结束时间的最大任务数

来自分类Dev

Vb.net-日期:如何获取一天的开始时间和结束时间

来自分类Dev

Vb.net-日期:如何获取一天的开始时间和结束时间

来自分类Dev

YouTube API获取具有指定ID的视频的共享计数

来自分类Dev

确定数据帧中每个id的值的开始和结束时间

来自分类Dev

在shell脚本中获取mysql的id计数

来自分类Dev

在shell脚本中获取mysql的id计数

来自分类Dev

如何获取特定ID的列的MAX计数?

来自分类Dev

添加具有唯一ID的动态输入字段以进行计数

来自分类Dev

HANA SQL选择ID的计数和与数组

来自分类Dev

弹性搜索唯一ID的唯一计数

来自分类Dev

区分ID与开始和结束日期时间

来自分类Dev

在滚动时间内按ID的不同计数日期

Related 相关文章

  1. 1

    在开始时间和结束时间之间每小时计数

  2. 2

    在开始时间和结束时间之间每小时计数

  3. 3

    查询以提供每个会话的源计数、目标计数、开始时间和结束时间等工作流统计信息

  4. 4

    MYSQL:查找连续计数的开始和结束时间戳记

  5. 5

    重置唯一ID计数

  6. 6

    从数据框中获取唯一ID计数的数量,并为计数和值创建新列

  7. 7

    如何根据Id获取计数

  8. 8

    每个日期的唯一ID的累计计数

  9. 9

    按 id 的唯一计数

  10. 10

    获取视频的开始时间和结束时间

  11. 11

    如何为具有特定值的重复ID选择唯一ID计数

  12. 12

    每天获取所有不同ID的计数

  13. 13

    SAS累计计数(按唯一ID和日期)

  14. 14

    SQL获取具有相同ID的所有行的计数

  15. 15

    具有开始时间和结束时间的重复事件的iCal格式

  16. 16

    具有开始时间和结束时间的SQL事件,转换为小时数

  17. 17

    安排具有固定开始时间和结束时间的最大任务数

  18. 18

    Vb.net-日期:如何获取一天的开始时间和结束时间

  19. 19

    Vb.net-日期:如何获取一天的开始时间和结束时间

  20. 20

    YouTube API获取具有指定ID的视频的共享计数

  21. 21

    确定数据帧中每个id的值的开始和结束时间

  22. 22

    在shell脚本中获取mysql的id计数

  23. 23

    在shell脚本中获取mysql的id计数

  24. 24

    如何获取特定ID的列的MAX计数?

  25. 25

    添加具有唯一ID的动态输入字段以进行计数

  26. 26

    HANA SQL选择ID的计数和与数组

  27. 27

    弹性搜索唯一ID的唯一计数

  28. 28

    区分ID与开始和结束日期时间

  29. 29

    在滚动时间内按ID的不同计数日期

热门标签

归档