我有一个大的数据框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的行。但是,每次达到距离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实现,以便在满足给定阈值时重置自身?
我看过Pandas中的rolling.sum,但这需要一个固定的窗口。在这种情况下,窗口将是可变的,因为我不知道之前达到了目标多少行。