首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将非空列分配给新列

将非空列分配给新列
EN

Stack Overflow用户
提问于 2022-03-17 18:06:57
回答 1查看 335关注 0票数 1

我在pyspark中提供了以下方案的数据

代码语言:javascript
运行
复制
  user_id  datadate       page_1.A   page_1.B  page_1.C  page_2.A  page_2.B  \
0      111  20220203         NaN       NaN      NaN      NaN       NaN   
1      222  20220203         5         5         5       5.0       5.0   
2      333  20220203         3         3         3       3.0       3.0   

     page_2.C  page_3.A  page_3.B  page_3.C  
0       NaN       1.0       1.0       2.0  
1       5.0       NaN       NaN       NaN  
2       4.0       NaN       NaN       NaN   

因此,它包含像user_id、datadate这样的列,并且每个页面(获得3页)只有很少的列,这是两个联接的结果。在本例中,我有page_1、page_2、page_3,每个列都有3列: A、B、C。另外,对于每一页列,每一行都是空的或全部为空,如我的示例所示。我不关心每页每列的值,我只想得到每一行的A、B、C值,这些值都不是null。

希望得到的结果表示例:

代码语言:javascript
运行
复制
  user_id  datadate  A  B  C
0      111  20220203  1  1  2
1      222  20220203  5  5  5
2      333  20220203  3  3  3

所以逻辑是这样的:

代码语言:javascript
运行
复制
df[A] = page_1.A or page_2.A or page_3.A, whichever is not null
df[B] = page_1.B or page_2.B or page_3.B, whichever is not null
df[C] = page_1.C or page_2.C or page_3.C, whichever is not null

所有的行..。当然,我想以一种有效的方式来做。非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-17 19:26:22

可以使用sql函数greatest提取列列表中的最大值。您可以在这里找到文档:https://spark.apache.org/docs/3.1.1/api/python/reference/api/pyspark.sql.functions.greatest.html

代码语言:javascript
运行
复制
from pyspark.sql import functions as F
(df.withColumn('A', F.greates(F.col('page_1.A'), F.col('page_2.A), F.col('page_3.A'))
   .withColumn('B', F.greates(F.col('page_1.B'), F.col('page_2.B), F.col('page_3.B'))
   .select('userid', 'datadate', 'A', 'B'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71517121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档