使用 when() 進行條件聚合 (Conditional aggregation using when())


問題描述

使用 when() 進行條件聚合 (Conditional aggregation using when())

我正在做這樣的聚合:

df2 = (
    df1
    .groupby('date', 'id', 'product')
    .agg(
        sf.count('new_user').alias('new_users'),
        sf.count('eligible_user').alias('eligible_users')

    )
)

我想計算 new_user 其中 eligible_user 為空。我試過這樣做:

df2 = (
    df1
    .groupby('date', 'id', 'product')
    .agg(
        sf.when(sf.col('eligible_user').isNull(), sf.count('new_user').alias('new_users')),
        sf.count('eligible_user').alias('eligible_users')       
    )
)

這個錯誤輸出:

Cannot resolve eligible_user given input columns.

blockquote>

我不確定為什麼會收到此錯誤,因為 eligible_userdf1 中(第一個查詢有效)。我不能簡單地將 .where() 放在 groupby() 之前,因為我想包含 eligible_user == 1eligible_users 計數中。


參考解法

方法 1:

To do a conditional count, you can use

sf.count(sf.when(sf.col('eligible_user').isNull(), sf.col('new_user')))

The count should be outside the when, not inside.

(by cs_guymck)

參考文件

  1. Conditional aggregation using when() (CC BY‑SA 2.5/3.0/4.0)

#Python #pyspark #apache-spark #apache-spark-sql






相關問題

如何從控制台中導入的文件中訪問變量的內容? (How do I access the contents of a variable from a file imported in a console?)

在 python 3.5 的輸入列表中添加美元符號、逗號和大括號 (Adding dollar signs, commas and curly brackets to input list in python 3.5)

為 KeyError 打印出奇怪的錯誤消息 (Strange error message printed out for KeyError)

django 1.9 中的 from django.views.generic.simple import direct_to_template 相當於什麼 (What is the equivalent of from django.views.generic.simple import direct_to_template in django 1.9)

查詢嵌入列表中的數組 (Querying for array in embedded list)

如何在 Python 中搜索子字符串是否在二進製文件中? (How to search if a substring is into a binary file in Python?)

為什麼要避免 while 循環? (Why avoid while loops?)

使用python的json模塊解析json請求 (Parse a json request using json module of python)

為什麼使用 py2app 模塊創建 mac 文件時出現錯誤? (Why i am getting Error when creating mac file using py2app module?)

當 python 線程在網絡調用(HTTPS)中並且發生上下文切換時會發生什麼? (What happens when the python thread is in network call(HTTPS) and the context switch happens?)

如何繪製一條帶斜率和一個點的線?Python (How to plot a line with slope and one point given? Python)

Pickle 找不到我不使用的模塊? (Pickle can't find module that I am not using?)







留言討論