如何在汽车价格栏中填写na值,使用group by version并使用中位数填写这些na值?我是这样用pandas做的:
median_price=df.groupby("version")["price"].transform("median") df["price"].fillna(median_price, inplace=True)
但我想不出这个逻辑的pyspark.你能帮帮我吗?
qc6wkl3g1#
有两种方法可以做到这一点1.使用预定义函数从pyspark.ml.feature import输入器从pyspark.ml.feature import输入器imputer = Imputer(inputCols='cars'],outputCols=["{}_imputed”.format(c)for c in 'cars']]).setStrategy(“median”)
df = imputer.fit(df).transform(df)现在,DF将有另一列汽车_输入1.第二种方法基本上需要你得到列的中位数,然后使用从pyspark.sql导入函数为Fmedian_value=df.select(F.median(F.col('cars ')df= df.fillna(median_value,subset=' cars ']
x4shl7ld2#
pyspark中的等效解决方案是按version分区,然后计算分区上的median价格。最后使用coalesce来填充空值。
version
median
coalesce
W = Window.partitionBy('version') df1 = df.withColumn('price', F.coalesce('price', F.median('price').over(W)))
举例来说
df.show() +-------+-----+ |version|price| +-------+-----+ | a| 1.5| | a| 2.0| | a| null| | b| 7.0| | b| 9.0| | c| 1.0| +-------+-----+ df1.show() +-------+-----+ |version|price| +-------+-----+ | a| 1.5| | a| 2.0| | a| 1.75| | b| 7.0| | b| 9.0| | c| 1.0| +-------+-----+
2条答案
按热度按时间qc6wkl3g1#
有两种方法可以做到这一点
1.使用预定义函数
从pyspark.ml.feature import输入器从pyspark.ml.feature import输入器
imputer = Imputer(inputCols='cars'],outputCols=["{}_imputed”.format(c)for c in 'cars']]).setStrategy(“median”)
在df中添加插补函数
df = imputer.fit(df).transform(df)
现在,DF将有另一列汽车_输入
1.第二种方法基本上需要你得到列的中位数,然后使用
从pyspark.sql导入函数为F
median_value=df.select(F.median(F.col('cars ')df= df.fillna(median_value,subset=' cars ']
x4shl7ld2#
pyspark中的等效解决方案是按
version
分区,然后计算分区上的median
价格。最后使用coalesce
来填充空值。举例来说