当新条目出现时获取计数

时间:2019-05-10 08:25:08

标签: python dataframe pyspark

我有ID和Date的数据框,我必须在数据框的每一列和计数列中计数新条目。

ID Date
A   1
B   1
C   1
A   1
A   1
B   2

我有这种类型的数据框,我想添加列并在记录出现时对记录进行计数,并更新计数值,最终的数据框我将给出为:

ID Date  count 
A   1     1
B   1     1
C   1     1
A   1     2
A   1     3
B   2     1

我将两列合并,并尝试计算该值的出现:

ID Date  merge_col 
A   1     A1
B   1     B1
C   1     C1
A   1     A1
A   1     A1
B   2     B1

预期数据框

ID Date  count 
A   1     1
B   1     1
C   1     1
A   1     2
A   1     3
B   2     1

1 个答案:

答案 0 :(得分:0)

为此,您需要countwindow组的ID上方的Date

下面是代码-

df = sqlContext.createDataFrame([
        ['A',   1],
        ['B',   1],
        ['C',   1],
        ['A',   1],
        ['A',   1],
        ['B',   2]
    ],
    ['ID', 'Date']
)
df.show()
+---+----+
| ID|Date|
+---+----+
|  A|   1|
|  B|   1|
|  C|   1|
|  A|   1|
|  A|   1|
|  B|   2|
+---+----+

#Import required Libraries
from pyspark.sql import functions as F
from pyspark.sql.window import Window as W
import sys

df.withColumn(
    "count",
    F.count(F.lit(1)).over(W.partitionBy(["ID", "Date"]).rowsBetween(-sys.maxsize, 0))
).show()

+---+----+-----+
| ID|Date|count|
+---+----+-----+
|  B|   1|    1|
|  C|   1|    1|
|  A|   1|    1|
|  A|   1|    2|
|  A|   1|    3|
|  B|   2|    1|
+---+----+-----+
IdDate

顺序将是随机的