加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在数据框中的列上创建bin

发布时间:2020-12-16 10:07:07 所属栏目:安全 来源:网络整理
导读:我有一个数据框df,结构如下: 输入 amount id13000 130000 210000 35000 4 我想根据列’amount’的分位数创建一个新列 预期产出: amount id amount_bin13000 1 1000030000 2 1500010000 3 100005000 4 5000 假设质量0.25,0.5和0.75分别为5000,10000和15000
我有一个数据框df,结构如下:

输入

amount id
13000  1
30000  2
10000  3
5000   4

我想根据列’amount’的分位数创建一个新列

预期产出:

amount id amount_bin
13000  1  10000
30000  2  15000
10000  3  10000
5000   4  5000

假设质量0.25,0.5和0.75分别为5000,10000和15000

我知道如何在R中这样做:

quantile <- quantile(df$amount,probs = c(0,0.25,0.50,0.75,1.0),na.rm = TRUE,names = FALSE)

df$amount_bin <- cut(df$amount,breaks = quantile,include.lowest = TRUE,labels = c(quantile[2],quantile[3],quantile[4],quantile[5]))

解决方法

您可以使用ML库中的 QuantileDiscretizer.

根据拟合分位数创建存储桶:

import org.apache.spark.ml.feature.QuantileDiscretizer

val data = Array((13000,1),(30000,2),(10000,3),(5000,4))
val df = spark.createDataFrame(data).toDF("amount","id")

val discretizer = new QuantileDiscretizer()
  .setInputCol("amount")
  .setOutputCol("result")
  .setNumBuckets(4)

val result = discretizer.fit(df).transform(df)
result.show()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读