Как взять цифру из строки из datafame - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть Dataframe:

ID      |  program  |  
--------|-----------|
53-8975 |  null     |
53-9875 |  null     |
53A7569 |           | 
53-9456 |  XXXX     |
53-9875 |           |
---------------------

ID и program String.Я хочу заполнить все null или "" в столбце program буквой K, и если четвертая цифра в столбце ID равна 9.Например:

У меня есть два идентификатора, в которых 4-й является 9: 53-9875 и 53-9456, а значения столбца программы соответственно: null и ""

Какмогу ли я заполнить столбец program буквой K, если 4th digit в столбце ID равен 9, а program равен null или "" с использованием pyspark.

Чтобы быть моим Dataframe:

ID      |  program  |  
--------|-----------|
53-8975 |  null     |
53-9875 |  K        |
53A7569 |           | 
53-9456 |  XXXX     |
53-9875 |   K       |
---------------------

Спасибо

1 Ответ

1 голос
/ 24 сентября 2019

Таким образом, если у нас есть ваш исходный кадр данных:

df = spark.createDataFrame([("53-8975", None), ("53-9875", None), ("53A7569", ""), ("53-9456", "XXXX"), ("53-9875", "")], ["id", "program"])
df.show()
+-------+-------+
|     id|program|
+-------+-------+
|53-8975|   null|
|53-9875|   null|
|53A7569|       |
|53-9456|   XXXX|
|53-9875|       |
+-------+-------+

Мы можем создать преобразование, которое принимает program или "k" в соответствии с вашей спецификацией с помощью when().otherwise():

from pyspark.sql.functions import *

programNullOrEmpty = (col("program") == "") | (isnull(col("program")))
id9 = col("id").substr(4,1) == "9"

df.withColumn("program", when(programNullOrEmpty & id9, lit("K"))
                         .otherwise(col("program")))\
    .show()

+-------+-------+
|     id|program|
+-------+-------+
|53-8975|   null|
|53-9875|      K|
|53A7569|       |
|53-9456|   XXXX|
|53-9875|      K|
+-------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...