У меня есть фрейм данных PySpark. Мне нужно заполнить мой идентификатор на основе столбца кода
Как я могу заменить NaN соответствующими значениями из других строк? Можем ли мы использовать объединение?
Вот как это сделать. Обратите внимание, что порядок не сохраняется, потому что ваш исходный фрейм данных не имеет определенного порядка.
import pyspark.sql.functions as F
from pyspark.sql.window import Window
df2 = df.withColumn('ID', F.first('ID', True).over(Window.partitionBy('Code')))
df2.show()
+---+----+
| ID|Code|
+---+----+
| 7| AZ|
| 7| AZ|
| 3| EV|
| 3| EV|
| 8| FW|
| 5| CX|
| 5| CX|
| 5| CX|
| 9| BY|
| 2| GU|
| 1| DW|
+---+----+
Если вы хотите сохранить исходный порядок, вы можете сделать еще один шаг по присвоению индекса:
df2 = df.withColumn('index', F.monotonically_increasing_id()).withColumn('ID', F.first('ID', True).over(Window.partitionBy('Code'))).orderBy('index').drop('index')
df2.show()
+---+----+
| ID|Code|
+---+----+
| 7| AZ|
| 5| CX|
| 9| BY|
| 5| CX|
| 5| CX|
| 1| DW|
| 7| AZ|
| 3| EV|
| 8| FW|
| 3| EV|
| 2| GU|
+---+----+
пожалуйста, сделайте ваш фрейм данных читаемым