当连续列值小于某个数字时,按行求和

2024-04-24 20:59:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数据框

df
col1     col2    col3
 A       34       1
 B       86       2
 A       53       21
 C       24       33
 B       21       2
 C       11       1

现在我想按行添加col1和col2值,其中连续的col3值小于3,因此最终的数据帧如下所示

 col1    col2
   A      120
   A       53
   C       24
   B       32

我可以使用for循环来实现这一点,并将其与前一行进行比较,但是执行时间将非常长,需要寻找一些快捷方式来最有效地实现这一点


1条回答
网友
1楼 · 发布于 2024-04-24 20:59:30

您可以使用cumsum来获取值<=3的连续块:

s = df.col3.ge(3)

# print `s.cumsum()` and `s` to see details
df.groupby([s.cumsum(),s], as_index=False).agg({'col1':'first','col2':'sum'})

输出:

  col1  col2
0    A   120
1    A    53
2    B    32
3    C    24

相关问题 更多 >