我有一个Class
列,该列可以是1、2或3,另一列Age
包含一些丢失的数据。我想估算每个Age
组的平均Class
。
我想做些事情:
grouped_data = df.groupBy('Class')
imputer = Imputer(inputCols=['Age'], outputCols=['imputed_Age'])
imputer.fit(grouped_data)
有什么解决方法吗?
感谢您的时间
答案 0 :(得分:1)
您需要使用拟合模型来转换数据框。然后取填充数据的平均值:
from pyspark.sql import functions as F
imputer = Imputer(inputCols=['Age'], outputCols=['imputed_Age'])
imp_model = imputer.fit(df)
transformed_df = imp_model.transform(df)
transformed_df \
.groupBy('Class') \
.agg(F.avg('Age'))
答案 1 :(得分:1)
使用Imputer,您可以将数据集过滤到每个<div id="wrapper">
<div id="A">
<div id="B">
</div>
</div>
</div>
值,计算均值,然后再将它们重新加入,因为您提前知道了值是什么:
Class
如果您事先不知道这些值是什么,或者它们不容易迭代,则可以对groupBy进行分组,将每个组的平均值作为DataFrame进行获取,然后将其合并回到原始数据中数据框。
subsets = []
for i in range(1, 4):
imputer = Imputer(inputCols=['Age'], outputCols=['imputed_Age'])
subset_df = df.filter(col('Class') == i)
imputed_subset = imputer.fit(subset_df).transform(subset_df)
subsets.append(imputed_subset)
# Union them together
# If you only have 3 just do it without a loop
imputed_df = subsets[0].unionByName(subsets[1]).unionByName(subsets[2])