фрейм данных pyspark, который имеет ряд числовых переменных.
для например
мой фрейм данных имеет значение столбца от 1 до 100.
1-10 - group1<== значение столбца от 1 до 10 должно содержать group1 в качестве значения 11-20 - 2 группа . . . 91-100 группа10
как я могу добиться этого, используя pyspark dataframe
# Creating an arbitrary DataFrame
df = spark.createDataFrame([(1,54),(2,7),(3,72),(4,99)], ['ID','Var'])
df.show()
+---+---+
| ID|Var|
+---+---+
| 1| 54|
| 2| 7|
| 3| 72|
| 4| 99|
+---+---+
После создания DataFrame
мы используем функцию floor()
, чтобы найти целую часть числа. Например; floor(15.5)
будет 15
. Нам нужно найти целую часть Var/10
и добавить к ней 1, потому что индексация начинается с 1, а не с 0. Наконец, нам нужно добавить group
к значению. Конкатенация может быть достигнута с помощью функции concat()
, но имейте в виду, что, поскольку предваряемое слово group
не является столбцом, поэтому нам нужно поместить его внутрь lit()
, что создает столбец с литеральным значением.
# Requisite packages needed
from pyspark.sql.functions import col, floor, lit, concat
df = df.withColumn('Var',concat(lit('group'),(1+floor(col('Var')/10))))
df.show()
+---+-------+
| ID| Var|
+---+-------+
| 1| group6|
| 2| group1|
| 3| group8|
| 4|group10|
+---+-------+
Спасибо за ваш вклад.
Вы также можете заменить 1+floor функцией ceil, в любом случае отметьте это как ответ, если это решило вашу проблему.
@sramalingam24 ха-ха, в спешке чуть не забыл. Спасибо за замечание :)
Привет, добро пожаловать в stackoverflow. Пожалуйста, дайте нам воспроизводимый пример и покажите нам желаемый результат.