Совокупный подсчет полярностей за последовательные датыPython

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

Сообщение Anonymous »

Пример данных
import polars as pl

df = pl.DataFrame(
{
"date": [
"2024-08-01",
"2024-08-02",
"2024-08-03",
"2024-08-04",
"2024-08-04",
"2024-08-05",
"2024-08-06",
"2024-08-08",
"2024-08-09",
],
"type": ["A", "A", "A", "A", "B", "B", "B", "A", "A"],
}
).with_columns(pl.col("date").str.to_date())

И мой желаемый результат будет выглядеть примерно так
shape: (9, 3)
┌────────────┬──────┬───────────────┐
│ date ┆ type ┆ days_in_a_row │
│ --- ┆ --- ┆ --- │
│ date ┆ str ┆ i64 │
╞════════════╪══════╪═══════════════╡
│ 2024-08-01 ┆ A ┆ 1 │
│ 2024-08-02 ┆ A ┆ 2 │
│ 2024-08-03 ┆ A ┆ 3 │
│ 2024-08-04 ┆ A ┆ 4 │
│ 2024-08-04 ┆ B ┆ 1 │
│ 2024-08-05 ┆ B ┆ 2 │
│ 2024-08-06 ┆ B ┆ 3 │
│ 2024-08-08 ┆ A ┆ 1 │
│ 2024-08-09 ┆ A ┆ 2 │
└────────────┴──────┴───────────────┘

Где мой счетчик дней_в_а_строке сбрасывается при разрыве дат более 1 дня.
Что я пробовал до сих пор
df.with_columns(days_in_a_row=pl.cum_count("date").over("type"))

Это дает мне
shape: (9, 3)
┌────────────┬──────┬───────────────┐
│ date ┆ type ┆ days_in_a_row │
│ --- ┆ --- ┆ --- │
│ date ┆ str ┆ u32 │
╞════════════╪══════╪═══════════════╡
│ 2024-08-01 ┆ A ┆ 1 │
│ 2024-08-02 ┆ A ┆ 2 │
│ 2024-08-03 ┆ A ┆ 3 │
│ 2024-08-04 ┆ A ┆ 4 │
│ 2024-08-04 ┆ B ┆ 1 │
│ 2024-08-05 ┆ B ┆ 2 │
│ 2024-08-06 ┆ B ┆ 3 │
│ 2024-08-08 ┆ A ┆ 5 │
│ 2024-08-09 ┆ A ┆ 6 │
└────────────┴──────┴───────────────┘

Который не сбрасывается после разрыва. Я не могу это понять.
Я также пробовал варианты с
df
.with_columns(date_gap=pl.col("date").diff().over("type"))
.with_columns(days_in_a_row=(pl.cum_count("date").over("date_gap", "type")))

Это ближе, но все равно не сбрасывается там, где мне хотелось бы.
shape: (9, 4)
┌────────────┬──────┬──────────────┬───────────────┐
│ date ┆ type ┆ date_gap ┆ days_in_a_row │
│ --- ┆ --- ┆ --- ┆ --- │
│ date ┆ str ┆ duration[ms] ┆ u32 │
╞════════════╪══════╪══════════════╪═══════════════╡
│ 2024-08-01 ┆ A ┆ null ┆ 1 │
│ 2024-08-02 ┆ A ┆ 1d ┆ 1 │
│ 2024-08-03 ┆ A ┆ 1d ┆ 2 │
│ 2024-08-04 ┆ A ┆ 1d ┆ 3 │
│ 2024-08-04 ┆ B ┆ null ┆ 1 │
│ 2024-08-05 ┆ B ┆ 1d ┆ 1 │
│ 2024-08-06 ┆ B ┆ 1d ┆ 2 │
│ 2024-08-08 ┆ A ┆ 4d ┆ 1 │
│ 2024-08-09 ┆ A ┆ 1d ┆ 4 │
└────────────┴──────┴──────────────┴───────────────┘


Подробнее здесь: https://stackoverflow.com/questions/786 ... tial-dates
Ответить

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

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

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

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

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