此帖子的后续内容: Counting non zero values in each column of a dataframe in python
目标是分别为每个“ Tag_0”和“ Tag_1”列计算有助于至少一个非零条目的“ Id”唯一值的数量。
基本输入
df
Id, Tag_0, Tag_1
Sam, 0, 5
Sam, 1, 3
Ron, 3, 1
Bob, 0, 3
Bob, 0, 4
Bob, 0, 0
所需的输出
Feature, NumUniqIdsPositive
Tag_0, 2
Tag_1, 3
此结果可以通过在列上使用循环标准实现,对于每个列C,我们可以调用
count = df.filter(df[C] > 0).select("Id").distinct().count()
但是,这样的循环效率很低,尤其是当列数大于1k时(例如,上面的示例包含Tag_0,Tag_1,...,Tag_1000)
我尝试了上面链接中的一些解决方案,但无法在groupBy子句中使用(column != 0).sum()
。
重复的问题?
不确定该查询是否可能重复,但为了澄清一下:我们正在寻找以下形式的解决方案
Tag_cols = [f for f in df.columns if "Tag" in f]
dg = df.groupBy(Tag_cols, (F.when(df[f] >0, True) for f in Tag_cols)).\
agg(countDistinct("Id"))
由于在when语句中如何循环ftr_cols,因此此尝试不起作用。如果有人可以解释为什么这可能是重复的话,那么我很烦。