我们可以从另一个数据框向数据框添加新列吗

Posted

技术标签:

【中文标题】我们可以从另一个数据框向数据框添加新列吗【英文标题】:Can we add new column to a data frame from another data frame 【发布时间】:2018-08-24 05:58:01 【问题描述】:

我是 Spark 的新手。我使用 pyspark 创建了一个数据框df1,它有 10 列。然后我为df1tempviewdf1 创建了一个临时视图。然后我从临时视图中选择了 5 列并制作了另一个数据框df2。现在我想将第 6 列从 df1 添加到 df2。是否可以?

我看到withColumn() 方法,但我意识到它只有在列名相同的情况下才有效。

【问题讨论】:

如果可能,请在开头包含第 6 列。之后可以添加,但会增加复杂性(例如,如果您有 id 列,则可以使用 join)。 @shaido 如何在开头添加第 6 列? 您说您从 df1 中选择了 5 列来制作 df2。不能在这里添加第 6 列吗?如果您添加当前代码和一些简化的数据框来说明问题,则更容易找到解决方案。 【参考方案1】:

@victor 假设您的 Df1 如下所示,

+---+----+----+----+----+----+----+
|key|col1|col2|col3|col4|col5|col6|
+---+----+----+----+----+----+----+
|  1|   1|   2|   3|   4|   7|   8|
|  2|   4|   3|   4|   5|   8|   9|
|  3|   9|   4|   5|   6|   9|  10|

并创建了一个视图

  Df1.createOrReplaceTempView("tempviewdf1")

并从中选择几列并将其设为 Df2

val Df2 = spark.sql("""select key, col1, col2, col3 , col4 from tempviewdf1""")

现在说你想在你的 Df2 中添加 col5 部分,只需将它们添加到 select..

val Df2 = spark.sql("""select key, col1, col2, col3 , col4, col5 from tempviewdf1""")

但是为什么要创建一个视图并从中选择一列并创建一个 Df2 呢?

你可以像下面这样(这是 spark-scala,类似地你可以在 pyspark 中看到)

val Df2 = Df1.select("key","col1","col2","col3","col4","col5")

即使你可以做其他方式,比如删除列。

https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#module-pyspark.sql.functions

【讨论】:

以上是关于我们可以从另一个数据框向数据框添加新列吗的主要内容,如果未能解决你的问题,请参考以下文章

我可以获取数据框三列的斜率并使用 python 中的值创建一个新列吗?

如何向 pandas df 添加一个新列,该列从另一个数据帧返回同一组中更大的最小值

如何允许通过 Microsoft Access 中的组合框向表中添加值?

使用 pyspark 和 when 条件从另一个数据框创建列

传递公式以在数据框中添加新列

将新列从另一个表连接到 redshift/sql 表