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

如何根据其他列的值在PySpark数据帧中创建新的字符串列?[重复]

雷锋
2023-03-14

我有一个PySpark数据帧,它有几个字段,例如:

我想创建一个新列,将其他注释的值混合到一个新字符串中。期望的输出为:

我正在尝试做(伪代码):

df = df.withColumn("New", "Hey there " + Name + " " + Surname + "!")

如何实现这一点?

共有1个答案

赵河
2023-03-14

您可以使用conat函数或format_string,如下所示:

from pyspark.sql import functions as F

df = df.withColumn(
    "New", 
    F.format_string("Hey there %s %s!", "Name", "Surname")
)

df.show(truncate=False)
# +---+----+-------+-----------------------+
# |Id |Name|Surname|New                    |
# +---+----+-------+-----------------------+
# |1  |John|Johnson|Hey there John Johnson!|
# |2  |Anna|Maria  |Hey there Anna Maria!  |
# +---+----+-------+-----------------------+

如果您喜欢使用concat:

F.concat(F.lit("Hey there "), F.col("Name"), F.lit(" "), F.col("Surname"), F.lit("!"))
 类似资料:
  • 我有两个熊猫数据框 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'cal2'值 我的预期输出如下所示: 以下基于其他stackflow

  • 我有一个pandas dataframe,需要根据dataframe中其他列的值创建新列。这是数据帧 人城市国家国家 美国伊利诺伊州芝加哥 美国亚利桑那州凤凰城B酒店 C美国加利福尼亚州圣地亚哥 我想根据state中的值创建两个新列 创建新列df[“城北”]=df[“城市”]其中state=“伊利诺伊” 创建新列df[“城市南部”]=df[“城市”],其中州不等于“伊利诺伊州” 我试过了 但是不等

  • 我有一个数据集,其中有大量表示过程代码的字符串列变量。还有另一列变量表示编码格式(有些是ICD9,有些是其他更神秘的格式)。每次观察都是一个病人。我需要: 搜索每个带有特定前缀的变量名 确保正在使用的代码是ICD9代码(由“02”表示)。 查找这些代码中哪些与特定字符串的前3个字符匹配 如果有任何变量以这三个字符开头,则创建一个新列变量=1,如果没有匹配,则创建一个新列变量=0 变量太多了,通过c

  • 问题内容: 我想申请我的自定义函数(它使用的梯)这六个列我的数据帧的每一行中)。 我尝试了与其他问题不同的方法,但似乎仍然找不到适合我问题的正确答案。关键在于,如果该人被视为西班牙裔,就不能被视为其他任何人。即使他们在另一个种族栏中的得分为“ 1”,他们仍然被视为西班牙裔,而不是两个或两个以上的种族。同样,如果所有ERI列的总和大于1,则将它们计为两个或多个种族,并且不能计为唯一的种族(西班牙裔除

  • 我试图在Spark Dataframe中创建一个列,如果列的行位于单独的Dataframe中,则为标志。 这是我的主Spark Dataframe() 这是我的引用(),这个引用中有数百行,所以我显然不能像这个解决方案或这个解决方案那样硬编码它们 我已经尝试了下面的代码,但我不明白图片中的错误是什么意思。

  • 问题内容: 我想比较在创建新列的两列的值。如果它们等于1,我想要1,否则等于0。 我得到了以下错误 问题答案: 您需要将布尔型蒙版转换为: 样品: 因为比较列的输出不是标量,而是(和)和值,所以会出现错误。 因此需要或 用于返回标量或。