pyspark-如何计算百分比

pbwdgjma  于 2021-07-13  发布在  Spark
关注(0)|答案(2)|浏览(535)

我有一个带有产品id、名称和重量的Dataframe。我希望计算出10-20,以及50-60之间的产品的百分比。我可以想出一个简单的方法,数一数所有的行,数一数权重为10-20,也有50-60的行,然后做一个除法。有什么更好的办法?我们可以使用一些内置函数吗?非常感谢你的帮助。

id. name. weight
 1.   a.    11
 2.   b     15
 3.   c     26
 4.   d.    51
 5.   e.    70
r9f1avp5

r9f1avp51#

你可以用 F.avg 获取列是否 weight 介于给定间隔之间。 .cast('int') 如果比较为真,则返回1,否则返回0。它的平均值将是您想要计算的百分比。

import pyspark.sql.functions as F

df2 = df.select(
    F.avg(F.col('weight').between(10,20).cast('int')).alias('10_20'), 
    F.avg(F.col('weight').between(50,60).cast('int')).alias('50_60')
)

df2.show()
+-----+-----+
|10_20|50_60|
+-----+-----+
|  0.4|  0.2|
+-----+-----+
bvjxkvbb

bvjxkvbb2#

听起来您需要条件聚合:

select avg(case when weight between 10 and 20 then 1.0 else 0 end) as ratio_10_20,
       avg(case when weight between 50 and 60 then 1.0 else 0 end) as ratio_50_60
from t;

相关问题