У меня есть фрейм данных, как показано ниже.
signal positions. rates
Date
2018-01-02 0 NaN 1.2065
2018-01-03 0 0.0 1.2023
2018-01-04 0 0.0 1.2065
2018-01-05 1 1.0 1.2045
2018-01-08 0. -1.0 1.1973
2018-01-09 0 0.0 1.1932
2018-01-10 0 0.0 1.1992
2018-01-11 1 1.0 1.2017
2018-01-12 1 0.0 1.2137
2018-01-15 0 -1.0 1.22
На основе столбца позиции, я хочу sh для создания новых столбцов с именем entryRate. Все строки между позициями 1 и -1 должны иметь одинаковую скорость: скорость, когда позиция = 1. Например:
signal positions rates entryRate
Date
2018-01-02 0 NaN 1.2065 0.0000
2018-01-03 0 0.0 1.2023 0.0000
2018-01-04 0 0.0 1.2065 0.0000
2018-01-05 1 1.0 1.2045 1.2045
2018-01-08 0 -1.0 1.1973 1.2045
2018-01-09 0 0.0 1.1932 0.0000
2018-01-10 0 0.0 1.1992 0.0000
2018-01-11 1 1.0 1.2017 1.2017
2018-01-12 1 0.0 1.2137 1.2017
2018-01-15 0 -1.0 1.2277 1.2017
В настоящее время я перебираю строки, чтобы реализовать это. Условие формируется в столбце сигнала, который остается = 1 между position = 1 и position = -1
dat['entryRate'] = 0
i=0
while(i<len(dat)):
if (dat.iloc[i,0]==1):
entry = dat.iloc[i,2]
while (dat.iloc[i,0]==1):
dat.iloc[i,3]=entry
i+=1
#end of dataframe cond
if(i==len(dat)):
break
#update one more row after end of while loop, don't update if end of dataframe is reached
if i<len(dat):
dat.iloc[i,4]=entry
else:
i+=1
Любой хороший способ векторизовать эту функцию? Я не могу понять, что использовать - применить, объединить asof, et c.
Ценю любые предложения, ребята :)