gpt4 book ai didi

dataframe - PySpark 数据帧聚合中包含 null 的计数

转载 作者:行者123 更新时间:2023-12-03 06:59:52 26 4
gpt4 key购买 nike

我正在尝试使用 agg 和 count 来获取 DataFrame 的一些计数。

from pyspark.sql import Row ,functions as F
row = Row("Cat","Date")
df = (sc.parallelize
([
row("A",'2017-03-03'),
row('A',None),
row('B','2017-03-04'),
row('B','Garbage'),
row('A','2016-03-04')
]).toDF())
df = df.withColumn("Casted", df['Date'].cast('date'))
df.show()

enter image description here

(
df.groupby(df['Cat'])
.agg
(
#F.count(col('Date').isNull() | col('Date').isNotNull()).alias('Date_Count'),
F.count('Date').alias('Date_Count'),
F.count('Casted').alias('Valid_Date_Count')
)
.show()

)

Sample

函数 F.count() 只给我非空计数。除了使用“OR”条件之外,是否有其他方法可以获取包含空值的计数。

无效计数似乎不起作用。 & 条件看起来没有按预期工作。

(
df
.groupby(df['Cat'])
.agg
(
F.count('*').alias('count'),
F.count('Date').alias('Date_Count'),
F.count('Casted').alias('Valid_Date_Count'),
F.count(col('Date').isNotNull() & col('Casted').isNull()).alias('invalid')
)
.show()
)

enter image description here

最佳答案

将 bool 表达式转换为 int 并对其进行sum

df\
.groupby(df['Cat'])\
.agg (
F.count('Date').alias('Date_Count'),
F.count('Casted').alias('Valid_Date_Count'),
F.sum((~F.isnull('Date')&F.isnull("Casted")).cast("int")).alias("Invalid_Date_Cound")
).show()

+---+----------+----------------+------------------+
|Cat|Date_Count|Valid_Date_Count|Invalid_Date_Cound|
+---+----------+----------------+------------------+
| B| 2| 1| 1|
| A| 2| 2| 0|
+---+----------+----------------+------------------+

关于dataframe - PySpark 数据帧聚合中包含 null 的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46306076/

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