python接收用户输入的各项成绩、按比例计算,python-计算PySpark中Spark DataFrame 的多列值的百分比...

我的Spark DataFrame 中有多个二进制列(0和1)。我想计算每列中1的百分比,并将结果投影到另一个 DataFrame 中。

输入 DataFrame dF如下:

+------------+-----------+

| a| b|

+------------+-----------+

| 0| 1|

| 1| 1|

| 0| 0|

| 1| 1|

| 0| 1|

+------------+-----------+

预期产出如下:

+------------+-----------+

| a| b|

+------------+-----------+

| 40| 80|

+------------+-----------+

40(2/5)和80(4/5)分别是a列和b列中1的百分比。

到目前为止,我尝试创建一个自定义聚合函数,将两列a和b传递给它,执行group by以获取0和1的计数,计算0和1的百分比,最后过滤 DataFrame 以仅保留1。

selection = ['a', 'b']

@F.udf

def cal_perc(c, dF):

grouped = dF.groupBy(c).count()

grouped = grouped.withColumn('perc_' + str(c), ((grouped['count']/5) * 100))

return grouped[grouped[c] == 1].select(['perc_' + str(c)])

dF.select((dF[c].alias(c) for c in selection)).agg((cal_perc(c, dF).alias(c) for c in selection)).show()

这似乎不起作用。我想不出哪里出错了。感谢您的帮助。谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值