Как показать столбец в фрейме данных PySpark в научной нотации в правильном формате

Идея вашего rle правильная. На образце вектора x,

with(rle(is.na(x)), max(lengths[values]) >= 5)

будет TRUE, если в строке 5 или более NA s. Просто используйте your_data$value для x.


Чтобы объяснить, давайте возьмем некоторые данные образца

x = c(1,1,1,1,1,1,1,1, NA, 1,1, NA, NA, NA, NA, NA, 1)

Немного сломаем rle(is.na(x1)), запустите (FULSE, после is.na)

rle(is.na(x))
# Run Length Encoding
#   lengths: int [1:5] 8 1 2 5 1
#   values : logi [1:5] FALSE TRUE FALSE TRUE FALSE

Конечно, мы заботимся только о TRUE s (NA ] s), поэтому мы подмножаем lengths на values, сохраняя длины, соответствующие значениям TRUE.

with(rle(is.na(x)), lengths[values])
# [1] 1 5

Тогда это так же просто, как смотреть на max того, что остается , и посмотрите, превышает ли он ваш порог.

0
задан user2356563 18 January 2019 в 19:31
поделиться

1 ответ

Вы можете использовать pyspark.sql.functions.format_string, что позволяет применять формат в формате printf для отображения результатов.

В этом случае вы можете использовать строку формата "%.2e" для форматирования числа с плавающей запятой в экспоненциальной (научной) записи с двумя десятичными знаками.

Например:

from pyspark.sql.functions import col, format_string

df.select(*[format_string("%.2e", col(c).cast("float")).alias(c) for c in df.columns]).show()
#+--------+--------+
#|    col1|    col2|
#+--------+--------+
#|3.35e+04|4.59e+07|
#|4.48e+08|7.86e+06|
#+--------+--------+

Помните, что результирующий столбец является строкой (а не числом).

0
ответ дан pault 18 January 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: