gpt4 book ai didi

python - pyspark计算组内两列中对的非空值

转载 作者:行者123 更新时间:2023-12-01 08:03:53 25 4
gpt4 key购买 nike

我有一些这样的数据

A    B    C
1 Null 3
1 2 4
2 Null 6
2 2 Null
2 1 2
3 Null 4

我想对 A 进行分组,然后计算不包含 Null 值的行数。所以,结果应该是

A    count  
1 1
2 1
3 0

我认为这行不通......,是吗?

df.groupby('A').agg(count('B','C'))

最佳答案

就我个人而言,我会使用辅助列来说明 B 或 C 是​​否为 Null。此解决方案中的结果为负,并返回 1 或 0。并对此列使用 sum。

from pyspark.sql.functions import sum, when
# ...
df.withColumn("isNotNull", when(df.B.isNull() | df.C.isNull(), 0).otherwise(1))\
.groupBy("A").agg(sum("isNotNull"))

演示:

df.show()
# +---+----+----+
# | _1| _2| _3|
# +---+----+----+
# | 1|null| 3|
# | 1| 2| 4|
# | 2|null| 6|
# | 2| 2|null|
# | 2| 1| 2|
# | 3|null| 4|
# +---+----+----+

df.withColumn("isNotNull", when(df._2.isNull() | df._3.isNull(), 0).otherwise(1)).show()
# +---+----+----+---------+
# | _1| _2| _3|isNotNull|
# +---+----+----+---------+
# | 1|null| 3| 0|
# | 1| 2| 4| 1|
# | 2|null| 6| 0|
# | 2| 2|null| 0|
# | 2| 1| 2| 1|
# | 3|null| 4| 0|
# +---+----+----+---------+

df.withColumn("isNotNull", when(df._2.isNull() | df._3.isNull(), 0).otherwise(1))\
.groupBy("_1").agg(sum("isNotNull")).show()
# +---+--------------+
# | _1|sum(isNotNull)|
# +---+--------------+
# | 1| 1|
# | 3| 0|
# | 2| 1|
# +---+--------------+

关于python - pyspark计算组内两列中对的非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55619452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com