熊猫数据框中列以可变间隔的滚动总和

时间:2018-11-17 02:51:31

标签: pandas dataframe sum

我有一个索引号列表,这些索引号表示DF的索引位置。 list_index = [2,7,12]

我想通过遍历list_index中的每个数字并总计索引点之间的计数(并在每个索引点重新开始计数为0)来从DF中的单个列求和。这是一个小例子。

enter image description here

所需的输出在OUTPUT列中,每当COL 1中再有一个1时,该列就会增加,并在list_index中的数字之后的位置处的0处重新开始计数。

我能够使它与循环一起使用,但是DF中有数百万行,因此循环运行需要一些时间。似乎我需要一个带和的lambda函数,但需要在索引中输入起点和终点。

类似于lambda x:x.rolling(start_index,end_index).sum()吗?谁能帮我这个忙。

1 个答案:

答案 0 :(得分:0)

您可以尝试累积总和,并且仅检索1个值的相关信息,不可能以不同的间隔滚动总和

a = df['col'].eq(1).cumsum()
df['output'] = a - a.mask(df['col'].eq(1)).ffill().fillna(0).astype(int)

出局:

    col output
0   0   0
1   1   1
2   1   2
3   0   0
4   1   1
5   1   2
6   1   3
7   0   0
8   0   0
9   0   0
10  0   0
11  1   1
12  1   2
13  0   0
14  0   0
15  1   1