Python 3.x 如何使用另一列中的一列替换字符串值?

Python 3.x 如何使用另一列中的一列替换字符串值?,python-3.x,pyspark,Python 3.x,Pyspark,如何使用另一列中的一列替换字符串值 我的数据框看起来像 Fname,MiddleName,应为\u Fname 约翰·D·霍伊,D·约翰·霍伊 约翰·D·霍伊,空,约翰·D·霍伊 约翰·多伊·霍伊,多伊,约翰·霍伊 约翰·D·D·约翰 约翰,约翰,约翰 约翰H,D,约翰H 约翰多伊,多伊,约翰 基本上在某些情况下,名字包含中间名中的值。我需要创建一个名字栏,不应该包含中间名中的值。 如何在PySpark中创建列“Expected\u FName”?您可以使用expr: from pyspark.

如何使用另一列中的一列替换字符串值

我的数据框看起来像

Fname,MiddleName,应为\u Fname

约翰·D·霍伊,D·约翰·霍伊

约翰·D·霍伊,空,约翰·D·霍伊

约翰·多伊·霍伊,多伊,约翰·霍伊

约翰·D·D·约翰

约翰,约翰,约翰

约翰H,D,约翰H

约翰多伊,多伊,约翰

基本上在某些情况下,名字包含中间名中的值。我需要创建一个名字栏,不应该包含中间名中的值。
如何在PySpark中创建列“Expected\u FName”?

您可以使用
expr

from pyspark.sql import functions

df = spark.createDataFrame([
    'John D Hoye,D,John Hoye'.split(','),
    ['John D Hoye', None, 'John D Hoye'],
    'John D-Doe Hoye,D-Doe,John Hoye'.split(','),
    'John D,D,John'.split(','),
    'D John,D,John'.split(','),
    'John Doe Hoy,Doe Hoy,John'.split(',')
], 'Fname,MiddleName,Expected_FName'.split(','))

res = df.withColumn('expected', functions.expr("regexp_replace(Fname, MiddleName, '')")
res.show()

+---------------+----------+--------------+----------+
|          Fname|MiddleName|Expected_FName|  expected|
+---------------+----------+--------------+----------+
|    John D Hoye|         D|     John Hoye|John  Hoye|
|    John D Hoye|      null|   John D Hoye|      null|
|John D-Doe Hoye|     D-Doe|     John Hoye|John  Hoye|
|         John D|         D|          John|     John |
|         D John|         D|          John|      John|
|   John Doe Hoy|   Doe Hoy|          John|     John |
+---------------+----------+--------------+----------+

还有一个例子,Fname=“John Dick H”和MiddleName=“D”的预期结果是=“John Dick H”。在这种情况下,不要删除“D”。怎么可能呢?