在pysp中分组时,对另一列上满足额外条件的元素进行计数

2024-10-03 06:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的pyspark命令

df = dataFrame.groupBy("URL_short").count().select("URL_short", col("count").alias("NumOfReqs"))

创建了以下结果

|URL_short |NumOfReqs|
+-----------------------------------------------------------------------------------------+---------+
|http1     | 500    |
|http4     | 500    |
|http2     | 500    |
|http3     | 500    |

在原始数据帧dataFrame中,我有一个名为success的列,其类型为text。该值可以是"true""false"

在结果中,我希望有一个名为NumOfSuccess的附加列,它统计每个类别URL_short在原始列success中具有条目"true"的元素

如何修改

df = dataFrame.groupBy("URL_short").count().select("URL_short", col("count").alias("NumOfReqs"))

还要输出满足条件success==“trueperURL_short`category”的列吗


Tags: 命令trueurldataframedfcountaliascol
1条回答
网友
1楼 · 发布于 2024-10-03 06:31:18

一种方法是添加另一个聚合表达式(也将count转换为agg表达式):

import pyspark.sql.functions as f

dataFrame.groupBy("URL_short").agg(
  f.count('*').alias('NumOfReqs'), 
  f.sum(f.when(f.col('success'), 1).otherwise(0)).alias('CountOfSuccess')
).show()

注意,这假设您的success列是布尔类型,如果它是字符串,请将表达式更改为f.sum(f.when(f.col('success') == 'true', 1).otherwise(0)).alias('CountOfSuccess')

相关问题 更多 >