Пример данных
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
Совокупный подсчет полярностей за последовательные даты ⇐ Python
Программы на Python
-
Anonymous
1762111539
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 │
└────────────┴──────┴───────────────┘
Который [b]не[/b] сбрасывается после разрыва. Я не могу это понять.
Я также пробовал варианты с
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 │
└────────────┴──────┴──────────────┴───────────────┘
Подробнее здесь: [url]https://stackoverflow.com/questions/78689213/polars-cumulative-count-over-sequential-dates[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия