簡體   English   中英

PySpark按條件計數值

[英]PySpark count values by condition

我有一個DataFrame,這里是一個代碼段:

[['u1', 1], ['u2', 0]]

基本上是一個名為f的字符串字段,第二個元素( is_fav )為1或0。

我需要做的是在第一個字段上分組並計算1和0的出現次數。 我希望做這樣的事情

num_fav = count((col("is_fav") == 1)).alias("num_fav")

num_nonfav = count((col("is_fav") == 0)).alias("num_nonfav")

df.groupBy("f").agg(num_fav, num_nonfav)

它無法正常工作,在兩種情況下我都得到相同的結果,該結果等於組中項目的計數,因此似乎忽略了過濾器(無論是1還是0)。 這是否取決於count工作方式?

這里沒有過濾器。 col("is_fav") == 1col("is_fav") == 0)都是布爾表達式,只要定義, count並不真正在乎它們的值。

例如,可以使用簡單的sum來解決許多問題:

from pyspark.sql.functions import sum, abs

gpd = df.groupBy("f")
gpd.agg(
    sum("is_fav").alias("fv"),
    (count("is_fav") - sum("is_fav")).alias("nfv")
)

或使忽略的值不確定(又稱為NULL ):

exprs = [
    count(when(col("is_fav") == x, True)).alias(c)
    for (x, c) in [(1, "fv"), (0, "nfv")]
]
gpd.agg(*exprs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM