Откос окна: Откосы на окнах: какие бывают, как выбрать

python – Pandas – Расчет уклона

спросил

Изменено 1 год, 1 месяц назад

Просмотрено 11 тысяч раз

Как рассчитать наклон скользящего значения каждого столбца (окно = 60) с шагом 5?

Я хочу рассчитать значение каждые 5 минут, и мне не нужны результаты каждой записи.

Вот образец данных и результаты:

 df
Время А... Н
01.01.2016 00:00 1.2 ... 4.2
01.01.2016 00:01 1.2 ... 4.0
01.01.2016 00:02 1.2 ... 4.5
01.01.2016 00:03 1.5...4.2
01.01.2016 00:04 1.1 ... 4.6
01.01.2016 00:05 1.6 ... 4.1
01.01.2016 00:06 1.7 ... 4.3
01.01.2016 00:07 1,8 ... 4,5
01.01.2016 00:08 1.1 ... 4.1
01.01.2016 00:09 1.5 ... 4.1
01.01.2016 00:10 1.6 ... 4.1
....
результат
Время А... Н
2016-01-01 00:04 ххх ... ххх
2016-01-01 00:09ххх .
.. ххх 2016-01-01 00:14 ххх ... ххх ...

Можно ли применить к этой проблеме функцию df.rolling?

Это нормально, если NaN находится в окне, что означает, что подмножество может быть меньше 60.

  • python
  • pandas
  • регрессия

Кажется, что вам нужно прокатывать с определенным размером шага . Однако, согласно документации pandas, размер шага в настоящее время не поддерживается в прокатке .

Если размер данных не слишком велик, просто выполните прокатку всех данных и выберите результаты с помощью индексации.

Вот пример набора данных. Для простоты столбец времени представлен целыми числами.

 данные = pd.DataFrame (np.random.rand (500, 1) * 10, столбцы = ['a'])
 
 а
0 8.714074
1 0,985467
2 9.101299
3 4.598044
4 4.193559
.. ...
495 9.736984
496 2.447377
497 5.209420
498 2.698441
499 3.438271
 

Затем раскатайте и рассчитайте уклоны,

 определение calc_slope(x):
    наклон = np. polyfit (диапазон (длина (x)), x, 1) [0]
    обратный уклон
# установите min_periods=2, чтобы разрешить подмножества меньше 60.
# используйте [4::5] для выбора нужных вам результатов.
результат = data.rolling(60, min_periods=2).apply(calc_slope)[4::5]
 

Результат будет,

 а
4 -0,542845
9 0,084953
14 0,155297
19 -0,048813
24 -0,011947
.. ...
479 -0,004792
484 -0,003714
489 0,022448
494 0,037301
499 0,027189
 

Или вы можете обратиться к этому сообщению. Первый ответ предоставляет простой способ добиться этого: размер шага в pandas.DataFrame.rolling

попробуйте это

 windows = df.groupby("Time")["A"].rolling(60)
df[out] = windows.apply(lambda x: np.polyfit(range(60), x, 1)[0], raw=True).values
 

Вы можете использовать Pandas Resample. Обратите внимание, что для использования этого вам нужен индекс со значением времени

 df.index = pd.to_datetime(df.Time)
распечатать дф
результат = df.resample('5Min').bfill()
распечатать результат
                                 Время А Н
Время
01. 01.2016 00:00:00 01.01.2016 00:00 1.2 4.2
01.01.2016 00:01:00 01.01.2016 00:01 1.2 4.0
01.01.2016 00:02:00 01.01.2016 00:02 1.2 4.5
01.01.2016 00:03:00 01.01.2016 00:03 1.5 4.2
01.01.2016 00:04:00 01.01.2016 00:04 1.1 4.6
01.01.2016 00:05:00 01.01.2016 00:05 1.6 4.1
01.01.2016 00:06:00 01.01.2016 00:06 1,7 4,3
01.01.2016 00:07:00 01.01.2016 00:07 1,8 4,5
01.01.2016 00:08:00 01.01.2016 00:08 1.1 4.1
2016-01-01 00:09:00 01.01.2016 00:09 1.5 4.1
01.01.2016 00:10:00 01.01.2016 00:10 1.6 4.1
01.01.2016 00:15:00 01.01.2016 00:15 1.6 4.1
                                 Время А Н
 

Выход

 Время
01.01.2016 00:00:00 01.01.2016 00:00 1.2 4.2
01.01.2016 00:05:00 01.01.2016 00:05 1.6 4.1
01.01.2016 00:10:00 01.01.2016 00:10 1.6 4.1
01.01.2016 00:15:00 01.01.2016 00:15 1.6 4.1
 

1

Я использую:

 df['slope_I'] = df['I'].rolling('600s').apply(лямбда x: (x[-1]-x[0])/600)
 

, где наклон равен 1/секунде.

Вероятно, первые 600 секунд результата будут пустыми, их следует заполнить нулями или средним значением. Первое число в столбце наклона будет наклоном линии, идущей от первого ряда внутри окна к последнему, и так далее во время прокатки.

С уважением.

Для других искателей ответов здесь я получил другое решение, в котором временной интервал не обязательно должен быть одинаковой длины.

 df.A.diff(60)/df.Time.diff(60).dt.total_seconds()
 

Эта строка кода берет разницу между текущей строкой и шестьюдесятью предыдущими строками и делит ее на разницу во времени тех же строк. Если вам нужна только каждая пятая запись, следующая строка должна работать.

 df.A.diff(60)/df.Time.diff(60).dt.total_seconds()[4::5]
 

Примечание: рассчитывается каждая строка, и возвращается только 5-ступенчатая серия

doc pandas diff: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.diff.html

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Пол Кремер | Окно 04 (Склон) (2018) | Доступно для продажи

Пауль Кремер: Стеки, склоны и потоки – Галерея Берггрюен На прошлой выставке

Средний

Состояние

Подпись

Сертификат подлинности

Ценовые диапазоны малых гравюр Пабло Пикассо

Просмотрите работы в этой категории

Возможно, самый влиятельный художник 20-го века, Пабло Пикассо, возможно, наиболее известен новаторским кубизмом и разрушением двухмерной плоскости изображения для передачи трехмерное пространство.

Вдохновленный африканским и иберийским искусством, он также способствовал возникновению сюрреализма и экспрессионизма. Значительное творчество Пикассо выросло до более чем 20 000 картин, гравюр, рисунков, скульптур, керамики, театральных декораций и эскизов костюмов. Он написал свою самую известную работу «Герника» (1937) в ответ на гражданскую войну в Испании; тотемическое полотно гризайль остается определяющим произведением антивоенного искусства. На аукционе несколько картин Пикассо были проданы более чем за 100 миллионов долларов. Неутомимый художник был героем выставок в самых престижных учреждениях мира, от Музея современного искусства и Центра Помпиду до Stedelijk Museum и Tate Modern.

Холст, акрил

46 × 36 дюймов | 116,8 × 91,4 см

Художественное произведение

Это

Свяжитесь по цене

Сан-Франциско

Получайте уведомления о похожих работах

Хотите продать работу этого художника? Продажа с вычурностью

Средний

Состояние

Подпись

Сертификат подлинности

Ценовой диапазон малых гравюр Пабло Пикассо

Просмотрите работы в этой категории

Пабло Пикассо, возможно, самый влиятельный художник 20-го века.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *