Сохраняйте ежедневную детализацию разницы во времени при заполнении нулевых значений или приведении к целому числу.Python

Программы на Python
Ответить
Anonymous
 Сохраняйте ежедневную детализацию разницы во времени при заполнении нулевых значений или приведении к целому числу.

Сообщение Anonymous »

Я вычисляю разницу во времени между двумя датами, это работает отлично:
import polars as pl
from datetime import date

df = pl.DataFrame({"a": pl.date_range(date(2023, 1, 1), date(2023, 1, 3))})

print(df.with_columns([(pl.col("a") - pl.col("a").shift(1))]))
# shape: (3, 1)
# ┌──────────────┐
# │ a │
# │ --- │
# │ duration[ms] │
# ╞══════════════╡
# │ null │
# │ 1d │
# │ 1d │
# └──────────────┘

Учитывая, что я работаю с запаздывающими переменными, я хотел бы заполнить значения nan, полученные в результате отставания второй переменной. Использование .fill_null(0) преобразует весь столбец в единицу измерения int64 со значениями, преобразованными с точностью до миллисекунды.
# Filling null values brings everything to the ms unit
print(df.with_columns([(pl.col("a") - pl.col("a").shift(1)).fill_null(0)]))
# shape: (3, 1)
# ┌──────────┐
# │ a │
# │ --- │
# │ i64 │
# ╞══════════╡
# │ 0 │
# │ 86400000 │
# │ 86400000 │
# └──────────┘

Это заставляет меня вернуть их к ежедневной детализации с помощью простого разделения:
# Which forces to a division to bring everything back to days
print(
df.with_columns(
[((pl.col("a") - pl.col("a").shift(1)).fill_null(0) / 86400000).cast(pl.UInt64)]
)
)
# shape: (3, 1)
# ┌─────┐
# │ a │
# │ --- │
# │ u64 │
# ╞═════╡
# │ 0 │
# │ 1 │
# │ 1 │
# └─────┘

Мне интересно, есть ли что-нибудь более практичное и краткое, чем это, чтобы хранить значения в виде целых чисел, представляющих день. Я прекрасно справляюсь с этой единицей самостоятельно, но при работе с большим количеством столбцов это может стать довольно многословным.
Полагаю, в настоящее время это не поддерживается, поскольку us, ns и ms — единственные единицы измерения, которые в настоящее время поддерживаются pl.Duration.

Полный повтор

import polars as pl
from datetime import date

df = pl.DataFrame({"a": pl.date_range(date(2023, 1, 1), date(2023, 1, 3))})

print(df.with_columns([(pl.col("a") - pl.col("a").shift(1))]))
# Filling null values brings everything to the ms unit
print(df.with_columns([(pl.col("a") - pl.col("a").shift(1)).fill_null(0)]))
# Which forces to a division to bring everything back to days
print(
df.with_columns(
[((pl.col("a") - pl.col("a").shift(1)).fill_null(0) / 86400000).cast(pl.UInt64)]
)
)


Подробнее здесь: https://stackoverflow.com/questions/754 ... casting-to
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»