Векторизовать накопленную сумму столбца, в котором накопленная сумма сбрасывается в ноль при каждом достижении цели? - PullRequest
0 голосов
/ 27 апреля 2019

У меня большой DF для фрейма данных, и я пытаюсь определить, каждый раз, когда значение столбца i-й строки толкает кумулятивный подсчет столбца после определенной цели.Тем не менее, кумулятивный счет должен быть сброшен до нуля каждый раз, когда цель достигнута.Затем я хочу замаскировать фрейм данных до этих конкретных строк.

Так сказать ...

Data={'Location':[1,2,3,5,7,4,6]}
DF= pd.DataFrame(Data)
DF['Points']=DF['Location'].diff()

Out:
   Location  Points
0         1     NaN
1         2     1.0
2         3     1.0
3         5     2.0
4         7     2.0
5         4    -3.0
6         6     2.0

Я хотел замаскировать DF до тех строк, где расстояние от начальной точки больше 2. Но каждый раз, когда достигается расстояние дваначальная точка сбрасывается.

В форме цикла логика может выглядеть примерно так.

def resetsum(): 
    L=[]    
    Points=0
    for i in range(len(DF)):
        Points += DF['Points'].iloc[i]
        if Points >= Goal:
           L.append(Df.iloc[i].index)
           Points = 0 

Тогда я мог бы использовать L для маскировки DF.Однако набор данных невероятно велик, и его нужно запускать несколько раз, поэтому зацикливание займет очень много времени.Есть ли способ векторизовать это или изменить реализацию cumsum, чтобы она сбрасывала себя при достижении определенного порога?

Я посмотрел на roll.sum в Pandas, но для этого требуется фиксированное окно.В этом случае окно будет переменным, потому что я не знаю, сколько строк назад было достигнуто целью.

...