我有一个带有产品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
r9f1avp51#
你可以用 F.avg 获取列是否 weight 介于给定间隔之间。 .cast('int') 如果比较为真,则返回1,否则返回0。它的平均值将是您想要计算的百分比。
F.avg
weight
.cast('int')
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| +-----+-----+
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;
2条答案
按热度按时间r9f1avp51#
你可以用
F.avg
获取列是否weight
介于给定间隔之间。.cast('int')
如果比较为真,则返回1,否则返回0。它的平均值将是您想要计算的百分比。bvjxkvbb2#
听起来您需要条件聚合: