問題描述
使用 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
blockquote>eligible_user
given input columns.我不確定為什麼會收到此錯誤,因為
eligible_user
在df1
中(第一個查詢有效)。我不能簡單地將.where()
放在groupby()
之前,因為我想包含eligible_user == 1
在eligible_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.參考文件