Dataframe 筛选但保留空行
我有一个融化的数据框,看起来像这样:Dataframe 筛选但保留空行,dataframe,pyspark,apache-spark-sql,Dataframe,Pyspark,Apache Spark Sql,我有一个融化的数据框,看起来像这样: # +---+--------+----------+ # | id| c_type|c_type_val| # +---+--------+----------+ # | 1|c_type_1| null| # | 1|c_type_2| null| # | 1|c_type_3| r| # | 2|c_type_1| a| # | 2|c_type_2| null| # | 2|
# +---+--------+----------+
# | id| c_type|c_type_val|
# +---+--------+----------+
# | 1|c_type_1| null|
# | 1|c_type_2| null|
# | 1|c_type_3| r|
# | 2|c_type_1| a|
# | 2|c_type_2| null|
# | 2|c_type_3| null|
# | 3|c_type_1| null|
# | 3|c_type_2| null|
# | 3|c_type_3| null|
# +---+--------+----------+
我想将行压缩为只有一个值的行,或者对于没有值的行,我想将它们设置为null type和null value,如下所示:
# +---+--------+----------+
# | id| c_type|c_type_val|
# +---+--------+----------+
# | 1|c_type_3| r|
# | 2|c_type_1| a|
# | 3| null| null|
# +---+--------+----------+
最初我是这样过滤的,但它会删除id=3的整行:
df.filter(df.c_type_val.isNotNull()).show()
从原始数据框中选择id
列,删除重复项,然后可以将其与过滤结果左键连接。缺少的id将为其他列的空值
df.select('id').dropDuplicates().join(
df.filter(df.c_type_val.isNotNull()), ['id'], how='left'
).show()
+---+--------+----------+
| id| c_type|c_type_val|
+---+--------+----------+
| 1|c_type_3| r|
| 3| null| null|
| 2|c_type_1| a|
+---+--------+----------+