я пытаюсь вычислить коэффициенты из п градусного полинома применяется к т -дня окна временного ряда. Однако я получаю исключение TypeError: only length-1 arrays can be converted to Python scalars
.окна Роллинг Полином помещается в пандах
Мои версии:
- Python 3.6
- панды версия 0.22.0
- NumPy версия 1.13.3
Код:
import pandas as pd
import numpy as np
my_ts = pd.Series(data = np.random.normal(size = 365 * 2), index = pd.date_range(start = '2013-01-01', periods = 365 * 2))
coefs = pd.rolling_apply(my_ts, 21, lambda x: np.polyfit(range(len(x)), x, 3))
Тем не менее, когда я обертываю np.polyfit
так что он возвращает только один коэффициент, rolling_apply
не имеет проблемы.
def pf_wrapper(x):
coef_lst = np.polyfit(range(len(x)), x, 3)
return coef_lst[0]
coefs = pd.rolling_apply(my_ts, 21, pf_wrapper)
UPDATE:
Поскольку pd.rolling_apply()
не в состоянии вернуть нескалярный, мое текущее решение заключается в следующем:
def get_beta(ts, deg):
coefs = polyfit(range(len(ts)), ts, deg = 3)[::-1]
return coefs[deg]
b0 = pd.rolling_apply(my_ts, 21, lambda x: get_beta(x, 0))
...
b3 = pd.rolling_apply(my_ts, 21, lambda x: get_beta(x, 3))