我有一个索引号列表,这些索引号表示DF的索引位置。 list_index = [2,7,12]
我想通过遍历list_index中的每个数字并总计索引点之间的计数(并在每个索引点重新开始计数为0)来从DF中的单个列求和。这是一个小例子。
所需的输出在OUTPUT列中,每当COL 1中再有一个1时,该列就会增加,并在list_index中的数字之后的位置处的0处重新开始计数。
我能够使它与循环一起使用,但是DF中有数百万行,因此循环运行需要一些时间。似乎我需要一个带和的lambda函数,但需要在索引中输入起点和终点。
类似于lambda x:x.rolling(start_index,end_index).sum()吗?谁能帮我这个忙。
答案 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