过滤行数据并将其相加,以查看是否可以使用reduce()和filter()组合得到结果



计算"停留时间"&;在黄色行之间,结果为:https://i.stack.imgur.com/9G6zF.png

有没有更好的办法

如果需要对level列的每2个值进行求和,通过比较levelSeries.eq来创建组,通过Series.cumsum添加累积和,并用Series.mask中的缺失值替换2行。然后将其传递给GroupBy.transform,最后一行只添加另一个mask,Series.duplicated:

df = pd.DataFrame({'level':[2,3,2,1,3,2,1,3,5,3,1,2],
'dwell time':[1,1,1,1,2,1,2,0,2,3,4,1]})
m = df['level'].eq(2)
g = m.cumsum().mask(m)
df['dwell time 1 + 3'] = (df.groupby(g)['dwell time']
.transform('sum')
.mask(g.duplicated(keep='last')))
print (df)
level  dwell time  dwell time 1 + 3
0       2           1               NaN
1       3           1               1.0
2       2           1               NaN
3       1           1               NaN
4       3           2               3.0
5       2           1               NaN
6       1           2               NaN
7       3           0               NaN
8       5           2               NaN
9       3           3               NaN
10      1           4              11.0
11      2           1               NaN

相关内容

最新更新