gpt4 book ai didi

python - 按组规范化pyspark数据帧

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:42 25 4
gpt4 key购买 nike

我想按组规范化 pyspark 中的数据框。提出的解决方案here没有帮助,因为我想转换数据框中的每一列。我在 pandas df 上使用 python 的代码如下:

df_norm = (X_df
.groupby('group')
.transform(lambda x: (x - x.min())/(x.max() - x.min()))
.fillna(0))

我如何在 pyspark 中使用 df 或 RDD 执行此操作?

例子:输入:

columns = ['group', 'sensor1', 'sensor2', 'sensor3']
vals = [
(a, 0.8, 0.02, 100),
(a, 0.5, 0.1, 200),
(a, 1, 0.5, 50),
(a, 0, 0.8, 30)
(b, 10, 1, 0)
(b, 20, 2, 3)
(b, 5, 4, 1)
]

期望的输出:

columns = ['group','sensor1', 'sensor2', 'sensor3']
vals = [
(a, 0.8, 0, 0.4118),
(a, 0.5, 0.1026, 1),
(a, 1, 0.615, 0.11),
(a, 0, 1, 0)
(b, 0.333, 0, 0)
(b, 1, 0.333, 1)
(b, 0, 1, 0.333)
]

最佳答案

我最终是这样做的:

w = Window.partitionBy('group')
for c in cols_to_normalize:
df = (df.withColumn('mini', F.min(c).over(w))
.withColumn('maxi', F.max(c).over(w))
.withColumn(c, ((F.col(c) - F.col('mini')) / (F.col('maxi') - F.col('mini'))))
.drop('mini')
.drop('maxi'))

关于python - 按组规范化pyspark数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54112439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com