当前位置: 首页 > 知识库问答 >
问题:

将 pyspark 中的两个数据帧合并为一列

吴涵育
2023-03-14

我有两个数据帧,我需要连接一列,如果id包含在第二个数据帧的同一列中,则只从第一个数据帧中获取行:

df1:

  id    a     b
  2     1     1
  3    0.5    1
  4     1     2
  5     2     1

断续器:

 id      c    d
  2      fs   a
  5      fa   f

期望输出:

df:
  id   a   b
   2   1   1
   5   2   1

我已经用df1.join(df2("id ")," left ")试过了,但是给我错误:“Dataframe”对象是不可调用的。

共有2个答案

万俟玉书
2023-03-14

如果您需要检查 id 是否存在于 df2 中,并且不需要在 df2 的输出中出现任何列,那么 isin() 是更有效的解决方案(这类似于 SQL 中的 EXISTSIN)。

df1 = spark.createDataFrame([(2,1,1) ,(3,5,1,),(4,1,2),(5,2,1)], "id: Int, a : Int , b : Int")

df2 = spark.createDataFrame([(2,'fs','a') ,(5,'fa','f')], ['id','c','d'])

创建df2.id作为列表,并将其传递到isin()下的df1。

from pyspark.sql.functions import col

df2_list = df2.select('id').rdd.map(lambda row : row[0]).collect()

df1.where(col('id').isin(df2_list)).show()

#+---+---+---+
#| id|  a|  b|
#+---+---+---+
#|  2|  1|  1|
#|  5|  2|  1|
#+---+---+---+

建议使用isin()IF-

> < li>

您不需要从参考数据框架/表格中返回数据

引用数据帧/表中存在重复项(如果值重复,则连接可能导致重复行)

戴凯歌
2023-03-14

df2(“id”)不是用于选择列的有效python语法,您需要df2[[[“id”]]],或者使用选择df2。选择(“id”);对于您的示例,您可以执行以下操作:

df1.join(df2.select("id"), "id").show()

+---+---+---+
| id|  a|  b|
+---+---+---+
|  5|2.0|  1|
|  2|1.0|  1|
+---+---+---+

或:

df1.join(df2[["id"]], "id").show()
+---+---+---+
| id|  a|  b|
+---+---+---+
|  5|2.0|  1|
|  2|1.0|  1|
+---+---+---+
 类似资料:
  • 我有两个数据帧,DF1和DF2,DF1是存储来自DF2的任何附加信息的主机。 假设DF1是以下格式, DF2包含DF1中已经存在的2个条目和两个新条目。(itemId和item被视为一个组,可以被视为连接的键) 我需要合并两个数据框,以便增加现有项目计数并插入新项目。 结果应该是这样的: 我有一种方法可以做到这一点,但不确定这种方法是否有效或正确

  • 这是我的密码: 我想知道如何将df3绑定到单个数据帧中作为"NA"s? 我在r_blogger上找到了一篇关于将向量或长度不等的数据帧组合成一个数据帧的文章。http://www.r-bloggers.com/r-combining-vectors-or-data-frames-of-unequal-length-into-one-data-frame/ 但是我从数据中得到的数据框,其中一些是空的

  • 我有一个PySpark数据帧,df1,看起来像: 我有第二个PySpark数据帧,df2 我想将df1的所有列(我有两列以上)与客户ID上的df2连接值相乘

  • 我有一个带有五列的Spark。我想添加另一列,其值是第一列和第二列的元组。当与with Col列()方法一起使用时,我得到不匹配错误,因为输入不是列类型,而是(列,列)。我想知道在这种情况下,除了在行上运行循环之外是否有解决方案?

  • 假设我有两个数据帧,具有不同级别的信息,如下所示: 我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。 预期产出:

  • 我有两个不同列数和行数的CSV文件。第一个CSV文件有M列和N行,第二个文件有H列和G行。一些列具有相同的名称。 null 另外,如果两个CSV文件有两个数据帧,并希望这样做,例如,如果我将第一个CSV加载到中,将第二个加载到中,然后希望合并到,类似于上面的示例。