Я пытаюсь создать рекурсивную функцию с использованием Pandas dataframe в python.
Я прочитал, и, кажется, есть несколько различных методов, либо для цикла / if, либо для метода Dataframe.apply;или scipy.signal.lfilter.Тем не менее, lfilter
не работает для меня, так как моя рекурсивная формула может иметь полиномиальную форму.
Рекурсивная формула, которую я хочу сделать:
x (t) = A * Bid + B * x (t-1) ^ C + BidQ
Я просмотрел несколько примеров, и одна возможность имеет вид ниже.
import pandas as pd
import datetime as dt
import numpy as np
import scipy.stats as stats
import scipy.optimize as optimize
from scipy.signal import lfilter
@xw.func
@xw.ret(expand='table')
def py_Recursive(v, lamda_, AscendType):
df = pd.DataFrame(v, columns=['Bid', 'Ask', 'BidQ', 'AskQ'])
df = df.sort_index(ascending=AscendType)
NewBid = lfilter([1], [1,-2], df['Bid'].astype=(float))
df = df.join(NewBid)
df = df.sort_index(ascending=True)
return df
lamda_
- это функция затухания, которая потенциально будет использоваться в будущем, и AscendType
имеет значение TRUE
или FALSE
Мой входной набор данных для v
соответствует приведенному ниже
v =
763.1 763.3 89 65
762.5 762.7 861 687
772.1 772.3 226 761
770.6 770.8 927 333
777.8 778.0 59 162
786.5 786.7 125 431
784.7 784.9 915 595
776.8 777.0 393 843
777.7 777.9 711 935
771.6 771.8 871 956
770.0 770.2 727 300
768.7 768.9 565 923