首页 > 解决方案 > 以可变间隔滚动熊猫数据框中的列的总和

问题描述

我有一个代表 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() 这样的东西?谁能帮我解决这个问题。

标签: pandasdataframesum

解决方案


您可以尝试累积和并仅检索 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

推荐阅读