为了账号安全,请及时绑定邮箱和手机立即绑定

Pyspark-用不同的列值替换列中的空值

Pyspark-用不同的列值替换列中的空值

红糖糍粑 2023-10-25 11:02:46
如何用category其中的不同值填充这一列空值?+---++--------+----------+| id||category|      Date|+---+---------+----------+| A1|     Null|2010-01-02|| A1|     Null|2010-01-03|| A1|    Nixon|2010-01-04|| A1|     Null|2010-01-05|| A9|     Null|2010-05-02|| A9|  Leonard|2010-05-03|| A9|     Null|2010-05-04|| A9|     Null|2010-05-05|+---+---------+----------+所需的数据框:+---++--------+----------+| id||category|      Date|+---+---------+----------+| A1|    Nixon|2010-01-02|| A1|    Nixon|2010-01-03|| A1|    Nixon|2010-01-04|| A1|    Nixon|2010-01-05|| A9|  Leonard|2010-05-02|| A9|  Leonard|2010-05-03|| A9|  Leonard|2010-05-04|| A9|  Leonard|2010-05-05|+---+---------+----------+我试过:w = Window().partitionBy("ID").orderBy("Date")df = df.withColumn("category", F.when(col("category").isNull(), col("category")\.distinct().over(w))\.otherwise(col("category")))我也尝试过:df = df.fillna({'category': col('category').distinct()})我也尝试过:df = df.withColumn('category', when(df.category.isNull(), df.category.distinct()).otherwise(df.category))
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您可以使用first()参数ignorenullsas True。

另外,请rowsBetween(-sys.maxsize, sys.maxsize)在窗户上使用。


from pyspark.sql import functions as F

from pyspark.sql.functions import *

from pyspark.sql.window import Window

import sys


w = Window().partitionBy("id").orderBy("Date")


df.withColumn("new", F.first('category', True).over(w.rowsBetween(-sys.maxsize, sys.maxsize)))\

        .orderBy("id", "Date").show()


+---+--------+----------+

| id|category|      Date|

+---+--------+----------+

| A1|   Nixon|2010-01-02|

| A1|   Nixon|2010-01-03|

| A1|   Nixon|2010-01-04|

| A1|   Nixon|2010-01-05|

| A9| Leonard|2010-05-02|

| A9| Leonard|2010-05-03|

| A9| Leonard|2010-05-04|

| A9| Leonard|2010-05-05|

+---+--------+----------+


查看完整回答
反对 回复 2023-10-25
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信