pandas dataframe,如果条件匹配且索引彼此相邻:添加值并删除使用的行

pandas dataframe, if condition match and index next to each other: add value and delete the row used

我想删除查询的数据框 - 行并在索引彼此相邻时用新数据替换它。

基本上是将值 i-1 加到 i。

这可以做到吗?

请看下面的示例数据: 如果我有上面的数据框:我想修改数据框如下


import pandas as pd 

training_data = pd.DataFrame()

training_data['a'] = [1,1,2,2,2,3,3,3,4,4,5,6,7]
training_data['b'] = [1,1,2,2,2,3,3,3,4,4,5,6,7]

training_data['c'] = [1,1,2,2,2,3,3,3,4,4,5,6,7]
training_data['condition'] = [True,True,False,False,True,True,False,False,True,False,False,False,True]


True_data = training_data[training_data['condition'] == True]


True_data:

index    a    b    c    condition   

0       1     1    1      True      

1       1     1    1      True 

4       2     2    2      True

5       3     3    3      True

8       4     4    4      True 

12      7     7    7      True 


desired output:

index    a    b    c    condition   


new     2     2    2      True 

new     5     5    5      True 

8       4     4    4      True

12      7     7    7      True 

所有相加的值都有索引,但是8、12没有,因此不会相加。

感谢大家的帮助。

尝试:

grp = (~training_data['condition']).cumsum()
training_data.query('condition')\
             .groupby(grp)\
             .agg({'a':'sum','b':'sum','c':'sum','condition':'first'})

输出:

           a  b  c  condition
condition                    
0          2  2  2       True
2          5  5  5       True
4          8  8  8       True
6          7  7  7       True

更新了新数据:

training_data['grp'] =  (~training_data['condition']).cumsum()

training_data.query('condition').groupby('grp').agg({'a':'sum','b':'sum','c':'sum','condition':'first'})

输出:

     a  b  c  condition
grp                    
0    2  2  2       True
2    5  5  5       True
4    4  4  4       True
7    7  7  7       True