gpt4 book ai didi

python - 根据列值重复字符串(就像Python中字符串和数字的乘法)

转载 作者:行者123 更新时间:2023-12-01 08:15:14 25 4
gpt4 key购买 nike

我有以下数据框(称为df),其中包含列item_nameitem_level:

   item_name    item_level 
----------------------------
Item1 1
Item2 2
Item3 2
Item4 3

我想创建一个新列,根据项目的级别产生缩进。为此,我想将 item_level 乘以字符串“---”,这样做的想法是,当我这样做时,字符串与自身连接的次数与我要与字符串相乘的整数值一样多。

我想要的结果是这样的:

  item_name    item_level      new_column
------------------------------------------------
Item1 1 ---Item1
Item2 2 ------Item2
Item3 2 ------Item3
Item4 3 ---------Item4

在 pyspark 中,当我编写以下命令时,创建的列仅包含 null 值:

from pyspark.sql import functions as F
df = df.withColumn('new_column',F.concat(F.lit(df.item_level*'---'),df.item_name))

null 值似乎来自整数与字符串的乘法。 concat 函数似乎工作正常。例如,以下作品:

df = df.withColumn('new_column',F.concat(df.item_name,df.item_name))

我还尝试了一些其他的事情。如果我使用常数来乘以字符串,则结果字符串将按预期显示:

number = 3
df = df.withColumn('new_column', F.lit(number*'---'))

此外,首先在列中添加“---”字符串(具有相同的行“---”),然后将该列与 item_level 列相乘也会得到空值:

df = df.withColumn('padding',F.lit('---'))
df = df.withColumn('test',df.padding*df.item_name)

但是,如果我使用 pandas,最后一段代码就会满足我的要求。但我需要在 pyspark 中执行此操作。

最佳答案

有一个函数pyspark.sql.functions.repeat那:

Repeats a string column n times, and returns it as a new string column.

repeat 的结果与 item_name 连接起来,就像您在代码中所做的那样。唯一的问题是您需要使用 pyspark.sql.functions.expr为了pass a column value as an argument to a spark function .

from pyspark.sql.functions import concat, expr

df.withColumn(
"new_column",
concat(expr("repeat('---', item_level)"), "item_name")
).show()
#+---------+----------+--------------+
#|item_name|item_level| new_column|
#+---------+----------+--------------+
#| Item1| 1| ---Item1|
#| Item2| 2| ------Item2|
#| Item3| 2| ------Item3|
#| Item4| 3|---------Item4|
#+---------+----------+--------------+

请注意,show() 将右对齐显示的输出,但基础数据如您所愿。

关于python - 根据列值重复字符串(就像Python中字符串和数字的乘法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55025809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com