熊猫:从头到尾的累计总和



我有一个带有开始和结束位置的数据帧。我想挤压行,其中end_n接近start_n+1并添加相应的值。最后,我想要累积总和以及该总和的开始值和结束值。

示例 indata,允许从end_nstart_n+1之间的距离为 <5 :

start        end       value
1          0            10        3
2          11           15        4
3          17           20        5
4          45           50        3
5          51           60        13
6          100          120       9

期望的结果:

start        end       value
1          0            10        3
2          11           15        4
3          17           20        5
4          45           50        3
5          51           60        13
6          100          120       9

start        end       sum
1          0            20        12
4          45           60        16
6          100          120       9

我想 lambda 函数可以做到这一点,但原始数据很大,这会影响性能。我更喜欢纯粹的熊猫/麻瓜解决方案。

减去移位值,如果更大,则 comapre 像5一样,用组的累积总和,然后按GroupBy.agg聚合:

g = df['start'].sub(df['end'].shift(fill_value=0)).gt(5).cumsum()
df = df.groupby(g).agg(start=('start', 'first'), end=('end','last'), sum=('value','sum'))
print (df)
start  end  sum
0      0   20   12
1     45   60   16
2    100  120    9

最新更新