Цель: используя временной ряд с частотой 1 секунду для каждой секунды, найдите значения 1 минуты, 2 минуты, 3 минуты, 4 минуты, 5 минут назад и просуммируйте 5 значений. Например, значение, рассчитанное для 23:59:59, будет суммой значений для 23:59:59, 23:58:59, 23:57:59, 23:56:59, 23:55:59. Значение, рассчитанное для 23:59:58, будет суммой значений в 23:59:58, 23:58:58, 23:57:58, 23:56:58, 23:55:58 и т. д.
Как правильно использовать полярные значения для расчета?
Я пробовал сбор_каждый(60).rolling_sum(5), который имел ShapeError. Затем я попытался использовать сбор_каждый и Rolling_sum отдельно, затем объединить, но в кадре данных сверху и снизу отображается значение NULL, что означает, что строки были добавлены случайным образом.
В исходе 7 столбец значений_gather_every должен иметь значение NULL вверху и значения внизу, чтобы быть правильным.
Пожалуйста, посмотрите код и выходные данные из блокнота ниже:
Код 1
import polars as pl
import numpy as np
from datetime import datetime, timedelta
start = datetime(2023, 1, 1)
seconds = 86400
end = start + timedelta(seconds=seconds-1)
values = np.arange(1, seconds + 1)
df = pl.DataFrame({
'dt': pl.datetime_range(start=start, end=end, interval="1s", eager=True),
'values': values
})
print(df)
Выход 1
shape: (86_400, 2)
┌─────────────────────┬────────┐
│ dt ┆ values │
│ --- ┆ --- │
│ datetime[μs] ┆ i64 │
╞═════════════════════╪════════╡
│ 2023-01-01 00:00:00 ┆ 1 │
│ 2023-01-01 00:00:01 ┆ 2 │
│ 2023-01-01 00:00:02 ┆ 3 │
│ 2023-01-01 00:00:03 ┆ 4 │
│ … ┆ … │
│ 2023-01-01 23:59:56 ┆ 86397 │
│ 2023-01-01 23:59:57 ┆ 86398 │
│ 2023-01-01 23:59:58 ┆ 86399 │
│ 2023-01-01 23:59:59 ┆ 86400 │
└─────────────────────┴────────┘
Код 2
df = df.with_columns(pl.col("values").gather_every(60).rolling_sum(5).name.suffix("_gather_every_rolling_sum"))
Выход 2
ShapeError: unable to add a column of length 1440 to a dataframe of height 86400
Код 3
gather_every_df = df.select("values").gather_every(60)
gather_every_df = gather_every_df.rename({"values": "values_gather_every"})
print(gather_every_df)
Выход 3
shape: (1_440, 1)
┌─────────────────────┐
│ values_gather_every │
│ --- │
│ i64 │
╞═════════════════════╡
│ 1 │
│ 61 │
│ 121 │
│ 181 │
│ 241 │
│ … │
│ 86101 │
│ 86161 │
│ 86221 │
│ 86281 │
│ 86341 │
└─────────────────────┘
Код 4
rolling_sum_df = gather_every_df.select("values_gather_every").rolling_sum(5)
print(rolling_sum_df)
Выход 4
AttributeError: 'DataFrame' object has no attribute 'rolling_sum'
Код 5
rolling_sum_series = gather_every_df.select("values_gather_every").to_series().rolling_sum(5)
print(rolling_sum_series)
Выход 5
shape: (1_440,)
Series: 'values_gather_every' [i64]
[
null
null
null
null
605
905
1205
1505
1805
2105
2405
2705
…
427505
427805
428105
428405
428705
429005
429305
429605
429905
430205
430505
430805
431105
]
Код 6
rolling_sum_df = pl.DataFrame({
'values_gather_every_rolling_sum': rolling_sum_series
})
print(rolling_sum_df)
Выход 6
shape: (1_440, 1)
┌─────────────────────────────────┐
│ values_gather_every_rolling_su… │
│ --- │
│ i64 │
╞═════════════════════════════════╡
│ null │
│ null │
│ null │
│ null │
│ 605 │
│ … │
│ 429905 │
│ 430205 │
│ 430505 │
│ 430805 │
│ 431105 │
└─────────────────────────────────┘
Код 7
df2 = pl.concat([df, gather_every_df, rolling_sum_df], how="horizontal")
print(df2)
print(df2.describe())
Выход 7
shape: (86_400, 4)
┌─────────────────────┬────────┬─────────────────────┬─────────────────────────────────┐
│ dt ┆ values ┆ values_gather_every ┆ values_gather_every_rolling_su… │
│ --- ┆ --- ┆ --- ┆ --- │
│ datetime[μs] ┆ i64 ┆ i64 ┆ i64 │
╞═════════════════════╪════════╪═════════════════════╪═════════════════════════════════╡
│ 2023-01-01 00:00:00 ┆ 1 ┆ 1 ┆ null │
│ 2023-01-01 00:00:01 ┆ 2 ┆ 61 ┆ null │
│ 2023-01-01 00:00:02 ┆ 3 ┆ 121 ┆ null │
│ 2023-01-01 00:00:03 ┆ 4 ┆ 181 ┆ null │
│ 2023-01-01 00:00:04 ┆ 5 ┆ 241 ┆ 605 │
│ … ┆ … ┆ … ┆ … │
│ 2023-01-01 23:59:55 ┆ 86396 ┆ null ┆ null │
│ 2023-01-01 23:59:56 ┆ 86397 ┆ null ┆ null │
│ 2023-01-01 23:59:57 ┆ 86398 ┆ null ┆ null │
│ 2023-01-01 23:59:58 ┆ 86399 ┆ null ┆ null │
│ 2023-01-01 23:59:59 ┆ 86400 ┆ null ┆ null │
└─────────────────────┴────────┴─────────────────────┴─────────────────────────────────┘
shape: (9, 5)
┌────────────┬────────────────────────────┬──────────────┬─────────────────────┬─────────────────────────────────┐
│ statistic ┆ dt ┆ values ┆ values_gather_every ┆ values_gather_every_rolling_su… │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ f64 ┆ f64 ┆ f64 │
╞════════════╪════════════════════════════╪══════════════╪═════════════════════╪═════════════════════════════════╡
│ count ┆ 86400 ┆ 86400.0 ┆ 1440.0 ┆ 1436.0 │
│ null_count ┆ 0 ┆ 0.0 ┆ 84960.0 ┆ 84964.0 │
│ mean ┆ 2023-01-01 11:59:59.500000 ┆ 43200.5 ┆ 43171.0 ┆ 215855.0 │
│ std ┆ null ┆ 24941.675966 ┆ 24950.19038 ┆ 124404.541718 │
│ min ┆ 2023-01-01 00:00:00 ┆ 1.0 ┆ 1.0 ┆ 605.0 │
│ 25% ┆ 2023-01-01 06:00:00 ┆ 21601.0 ┆ 21601.0 ┆ 108305.0 │
│ 50% ┆ 2023-01-01 12:00:00 ┆ 43201.0 ┆ 43201.0 ┆ 216005.0 │
│ 75% ┆ 2023-01-01 17:59:59 ┆ 64800.0 ┆ 64741.0 ┆ 323405.0 │
│ max ┆ 2023-01-01 23:59:59 ┆ 86400.0 ┆ 86341.0 ┆ 431105.0 │
└────────────┴────────────────────────────┴──────────────┴─────────────────────┴─────────────────────────────────┘
Подробнее здесь: https://stackoverflow.com/questions/767 ... olling-sum
Правильный способ использования полярных полей ignore_every с Rolling_sum ⇐ Python
Программы на Python
1762267449
Anonymous
Цель: используя временной ряд с частотой 1 секунду для каждой секунды, найдите значения 1 минуты, 2 минуты, 3 минуты, 4 минуты, 5 минут назад и просуммируйте 5 значений. Например, значение, рассчитанное для 23:59:59, будет суммой значений для 23:59:59, 23:58:59, 23:57:59, 23:56:59, 23:55:59. Значение, рассчитанное для 23:59:58, будет суммой значений в 23:59:58, 23:58:58, 23:57:58, 23:56:58, 23:55:58 и т. д.
Как правильно использовать полярные значения для расчета?
Я пробовал сбор_каждый(60).rolling_sum(5), который имел ShapeError. Затем я попытался использовать сбор_каждый и Rolling_sum отдельно, затем объединить, но в кадре данных сверху и снизу отображается значение NULL, что означает, что строки были добавлены случайным образом.
В исходе 7 столбец значений_gather_every должен иметь значение NULL вверху и значения внизу, чтобы быть правильным.
Пожалуйста, посмотрите код и выходные данные из блокнота ниже:
Код 1
import polars as pl
import numpy as np
from datetime import datetime, timedelta
start = datetime(2023, 1, 1)
seconds = 86400
end = start + timedelta(seconds=seconds-1)
values = np.arange(1, seconds + 1)
df = pl.DataFrame({
'dt': pl.datetime_range(start=start, end=end, interval="1s", eager=True),
'values': values
})
print(df)
Выход 1
shape: (86_400, 2)
┌─────────────────────┬────────┐
│ dt ┆ values │
│ --- ┆ --- │
│ datetime[μs] ┆ i64 │
╞═════════════════════╪════════╡
│ 2023-01-01 00:00:00 ┆ 1 │
│ 2023-01-01 00:00:01 ┆ 2 │
│ 2023-01-01 00:00:02 ┆ 3 │
│ 2023-01-01 00:00:03 ┆ 4 │
│ … ┆ … │
│ 2023-01-01 23:59:56 ┆ 86397 │
│ 2023-01-01 23:59:57 ┆ 86398 │
│ 2023-01-01 23:59:58 ┆ 86399 │
│ 2023-01-01 23:59:59 ┆ 86400 │
└─────────────────────┴────────┘
Код 2
df = df.with_columns(pl.col("values").gather_every(60).rolling_sum(5).name.suffix("_gather_every_rolling_sum"))
Выход 2
ShapeError: unable to add a column of length 1440 to a dataframe of height 86400
Код 3
gather_every_df = df.select("values").gather_every(60)
gather_every_df = gather_every_df.rename({"values": "values_gather_every"})
print(gather_every_df)
Выход 3
shape: (1_440, 1)
┌─────────────────────┐
│ values_gather_every │
│ --- │
│ i64 │
╞═════════════════════╡
│ 1 │
│ 61 │
│ 121 │
│ 181 │
│ 241 │
│ … │
│ 86101 │
│ 86161 │
│ 86221 │
│ 86281 │
│ 86341 │
└─────────────────────┘
Код 4
rolling_sum_df = gather_every_df.select("values_gather_every").rolling_sum(5)
print(rolling_sum_df)
Выход 4
AttributeError: 'DataFrame' object has no attribute 'rolling_sum'
Код 5
rolling_sum_series = gather_every_df.select("values_gather_every").to_series().rolling_sum(5)
print(rolling_sum_series)
Выход 5
shape: (1_440,)
Series: 'values_gather_every' [i64]
[
null
null
null
null
605
905
1205
1505
1805
2105
2405
2705
…
427505
427805
428105
428405
428705
429005
429305
429605
429905
430205
430505
430805
431105
]
Код 6
rolling_sum_df = pl.DataFrame({
'values_gather_every_rolling_sum': rolling_sum_series
})
print(rolling_sum_df)
Выход 6
shape: (1_440, 1)
┌─────────────────────────────────┐
│ values_gather_every_rolling_su… │
│ --- │
│ i64 │
╞═════════════════════════════════╡
│ null │
│ null │
│ null │
│ null │
│ 605 │
│ … │
│ 429905 │
│ 430205 │
│ 430505 │
│ 430805 │
│ 431105 │
└─────────────────────────────────┘
Код 7
df2 = pl.concat([df, gather_every_df, rolling_sum_df], how="horizontal")
print(df2)
print(df2.describe())
Выход 7
shape: (86_400, 4)
┌─────────────────────┬────────┬─────────────────────┬─────────────────────────────────┐
│ dt ┆ values ┆ values_gather_every ┆ values_gather_every_rolling_su… │
│ --- ┆ --- ┆ --- ┆ --- │
│ datetime[μs] ┆ i64 ┆ i64 ┆ i64 │
╞═════════════════════╪════════╪═════════════════════╪═════════════════════════════════╡
│ 2023-01-01 00:00:00 ┆ 1 ┆ 1 ┆ null │
│ 2023-01-01 00:00:01 ┆ 2 ┆ 61 ┆ null │
│ 2023-01-01 00:00:02 ┆ 3 ┆ 121 ┆ null │
│ 2023-01-01 00:00:03 ┆ 4 ┆ 181 ┆ null │
│ 2023-01-01 00:00:04 ┆ 5 ┆ 241 ┆ 605 │
│ … ┆ … ┆ … ┆ … │
│ 2023-01-01 23:59:55 ┆ 86396 ┆ null ┆ null │
│ 2023-01-01 23:59:56 ┆ 86397 ┆ null ┆ null │
│ 2023-01-01 23:59:57 ┆ 86398 ┆ null ┆ null │
│ 2023-01-01 23:59:58 ┆ 86399 ┆ null ┆ null │
│ 2023-01-01 23:59:59 ┆ 86400 ┆ null ┆ null │
└─────────────────────┴────────┴─────────────────────┴─────────────────────────────────┘
shape: (9, 5)
┌────────────┬────────────────────────────┬──────────────┬─────────────────────┬─────────────────────────────────┐
│ statistic ┆ dt ┆ values ┆ values_gather_every ┆ values_gather_every_rolling_su… │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ f64 ┆ f64 ┆ f64 │
╞════════════╪════════════════════════════╪══════════════╪═════════════════════╪═════════════════════════════════╡
│ count ┆ 86400 ┆ 86400.0 ┆ 1440.0 ┆ 1436.0 │
│ null_count ┆ 0 ┆ 0.0 ┆ 84960.0 ┆ 84964.0 │
│ mean ┆ 2023-01-01 11:59:59.500000 ┆ 43200.5 ┆ 43171.0 ┆ 215855.0 │
│ std ┆ null ┆ 24941.675966 ┆ 24950.19038 ┆ 124404.541718 │
│ min ┆ 2023-01-01 00:00:00 ┆ 1.0 ┆ 1.0 ┆ 605.0 │
│ 25% ┆ 2023-01-01 06:00:00 ┆ 21601.0 ┆ 21601.0 ┆ 108305.0 │
│ 50% ┆ 2023-01-01 12:00:00 ┆ 43201.0 ┆ 43201.0 ┆ 216005.0 │
│ 75% ┆ 2023-01-01 17:59:59 ┆ 64800.0 ┆ 64741.0 ┆ 323405.0 │
│ max ┆ 2023-01-01 23:59:59 ┆ 86400.0 ┆ 86341.0 ┆ 431105.0 │
└────────────┴────────────────────────────┴──────────────┴─────────────────────┴─────────────────────────────────┘
Подробнее здесь: [url]https://stackoverflow.com/questions/76762034/correct-way-to-use-polars-gather-every-with-rolling-sum[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия