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
我想删除查询的数据框 - 行并在索引彼此相邻时用新数据替换它。
基本上是将值 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