скользящее взвешенное скользящее среднее значение панд - PullRequest
0 голосов
/ 09 сентября 2018

Я просмотрел стекопоток и не могу найти именно то, что мне подходит.

Я рассчитываю взвешенное скользящее среднее для скользящего окна.

Уравнение:

 #weighted average temp with smoothing factor, a
 #T_w = sum[k=1,24](a^(k-1)*T(t-k)) / sum[k=1,24]a^(k-1)

Кажется, достаточно просто, но мне нужно применить это среднее к скользящему окну. Я могу сделать скользящее среднее (простое скользящее среднее):

 T_ = pd.DataFrame()
 T_ = temps['T'].rolling(window=24).mean()

Но теперь я хочу применить веса ТОЛЬКО к окну, по которому я усредняю. Python .ewm () не сокращает горчицу, потому что я хочу, чтобы веса были только для окна, по которому я «переворачиваюсь».

Я нашел несколько фрагментов кода, которые могут работать, но компоненты не работают:

from functools import partial

window = 13
alpha = 1-ln(2)/3    # This is ewma's decay factor.
weights = list(reversed([(1-alpha)**n for n in range(window)]))
ewma = partial(average, weights=weight)
rolling_average = series.rolling(window).apply(ewma)

Здесь проблема, с которой я столкнулся, заключается в том, что функцияручная () вызывает среднее () - это было представлено здесь - Создание скользящего пользовательского EWMA на кадре данных pandas - но я не могу комментировать пока (новичок), и я не знаю, где это взять.

Еще одно решение, которое я реализовал, но оно не выполняет именно то, что мне нужно:

alpha = 0.1    # This is my smoothing parameter
weights = list(reversed([(1-alpha)**n for n in range(window)]))
def f(w):
    def g(x):
        return (w*x).mean()
    return g
T_ = pd.DataFrame()
T_ = temps['T'].rolling(window=24).apply(f(weights))

На основе предложенного решения здесь: Расчет взвешенного скользящего среднего с использованием метода Ролдинга панд Проблема этого подхода в том, что он вычисляет среднее значение, тогда как мне нужно что-то вроде этого:

return (w*x).sum() / w.sum()

Но это не работает, потому что

AttributeError: 'list' object has no attribute 'sum'

Как рассчитать скользящее взвешенное скользящее среднее с указанным окном (здесь, последние 24 часа) и заданным параметром сглаживания a (который применяется только к последним 24 часам)?

1 Ответ

0 голосов
/ 09 сентября 2018

Вместо return (w*x).sum() / w.sum(), попробуйте sum(w*x) / sum(w). Это поможет вам преодолеть, по крайней мере, AttributeError.

sum - это встроенная функция Python, которая будет работать с любыми повторяющимися объектами хранения, которые можно суммировать (т.е. добавлять объекты, которые можно добавлять вместе с +). Примеры этих объектов включают int, float и т. Д.

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