У меня есть фрейм данных (df), который состоит из 10K строк. Мой фрейм данных выглядит как -
id value
1 .65
2 .89
3 .33
4 .92
5 .95
6 .5
Мое ведро должно быть = [0, .60, .76,1]
Мой ожидаемый выход -
id value bucket value_.6_.76 value_.76_1 value_0_.6
1 .65 [.6-.76] 1 0 0
2 .89 [.76-1] 0 1 0
3 .33 [0-.6] 0 0 1
4 .92 [.76-1] 0 1 0
5 .95 [.76-1] 0 1 0
6 .5 [.60-.76] 1 0 0
Я уже сделал -
В моем фрейме данных id = строка и значение = double
from pyspark.ml.feature import Bucketizer
bucketizer = Bucketizer(splits=[ 0,.60,.76,1 ],inputCol="value", outputCol="value_bucket", handleInvalid="keep")
df1 = bucketizer.transform(df1)
value_buckets = [0,.60,.76,1]
bins = list(zip(value_buckets, value_buckets[1:]))
data = [[i] + ['({0}-{1}]'.format(*bin_endpoints)] + [0] * i + [1] + [0] * (len(bins) - i - 1)
for i, bin_endpoints in enumerate(bins)]
schema = ', '.join('value_bucket_{}_{}: double'.format(start, end)
for start, end in zip(value_buckets, value_buckets[1:]))
join_df = spark.createDataFrame(data, 'value_buckets: double, value_buckets_string: string, ' + schema)
df2 = (df1.join(join_df, on='value_bucket', how='left')
.drop('value_bucket')
.withColumnRenamed('value_bucket_string', 'value_bucket')
.orderBy('id'))