我有一个带有开始和结束位置的数据帧。我想挤压行,其中end_n
接近start_n+1
并添加相应的值。最后,我想要累积总和以及该总和的开始值和结束值。
示例 indata,允许从end_n
到start_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