向量化列的累积总和,每次达到目标时累积总和重置为零?

时间:2019-04-27 10:24:13

标签: python pandas loops numpy vectorization

我有一个大的数据框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,但这需要一个固定的窗口。在这种情况下,窗口将是可变的,因为我不知道之前达到了目标多少行。

0 个答案:

没有答案