У меня большой 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, но для этого требуется фиксированное окно.В этом случае окно будет переменным, потому что я не знаю, сколько строк назад было достигнуто целью.