Суммирование значений на основе диапазонов дат в DataFrame с использованием PolarsPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Суммирование значений на основе диапазонов дат в DataFrame с использованием Polars

Сообщение Anonymous »

У меня есть DataFrame (df), который содержит столбцы: ID, Начальная дата, Конечная дата и Значение, а также другой DataFrame (dates), который содержит все дни для каждого идентификатора из df.
В кадре данных дат я хочу суммировать значения, если они существуют в диапазоне каждого идентификатора
Вот мой код
import polars as pl
from datetime import datetime

data = {
"ID" : [1, 2, 3, 4, 5],
"Initial Date" : ["2022-01-01", "2022-01-02", "2022-01-03", "2022-01-04", "2022-01-05"],
"Final Date" : ["2022-01-03", "2022-01-06", "2022-01-07", "2022-01-09", "2022-01-07"],
"Value" : [10, 20, 30, 40, 50]

}

df = pl.DataFrame(data)

dates = pl.datetime_range(
start=datetime(2022,1,1),
end=datetime(2022,1,7),
interval="1d",
eager = True,
closed = "both"
).to_frame("date")

shape: (5, 4)
┌─────┬──────────────┬────────────┬───────┐
│ ID ┆ Initial Date ┆ Final Date ┆ Value │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str ┆ i64 │
╞═════╪══════════════╪════════════╪═══════╡
│ 1 ┆ 2022-01-01 ┆ 2022-01-03 ┆ 10 │
│ 2 ┆ 2022-01-02 ┆ 2022-01-06 ┆ 20 │
│ 3 ┆ 2022-01-03 ┆ 2022-01-07 ┆ 30 │
│ 4 ┆ 2022-01-04 ┆ 2022-01-09 ┆ 40 │
│ 5 ┆ 2022-01-05 ┆ 2022-01-07 ┆ 50 │
└─────┴──────────────┴────────────┴───────┘

shape: (7, 1)
┌─────────────────────┐
│ date │
│ --- │
│ datetime[μs] │
╞═════════════════════╡
│ 2022-01-01 00:00:00 │
│ 2022-01-02 00:00:00 │
│ 2022-01-03 00:00:00 │
│ 2022-01-04 00:00:00 │
│ 2022-01-05 00:00:00 │
│ 2022-01-06 00:00:00 │
│ 2022-01-07 00:00:00 │
└─────────────────────┘

В этом случае 01 января 2022 г. значение будет 10. 02 января 2022 г. оно будет 10 + 20, а 3 января 2022 г. будет 10 + 20 + 30 и так далее. Другими словами, я хочу проверить, существует ли дата в диапазоне каждой строки DataFrame (df), и если да, суммируйте значения.
Я думаю, что подход для этого такой:
(
dates.with_columns(
pl.sum(
pl.when(
(df["Initial Date"] = pl.col("date"))
).then(df["Value"]).otherwise(0)
).alias("Summed Value")
)

)


Подробнее здесь: https://stackoverflow.com/questions/787 ... ing-polars
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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