Python 按条件定义的组对数据帧求和

Python 按条件定义的组对数据帧求和,python,pandas,dataframe,sum,rows,Python,Pandas,Dataframe,Sum,Rows,我有python数据帧,我想在不同的行之间求和,用数字0分隔。例如:我这里有一个DF: data= DataFrame({'A':['a','b','c','d','e','f','g','h','i'],'B':[1,2,0,3,2,0,0,3,4]}) 我想生成这个DF: data2= DataFrame({'AA':'a','d','h'],'BB':[3,5,7]}) 一种可能的方法是使用函数cumsum定义一些组: data = pd.DataFrame({'A':['a','b'

我有python数据帧,我想在不同的行之间求和,用数字0分隔。例如:我这里有一个DF:

data= DataFrame({'A':['a','b','c','d','e','f','g','h','i'],'B':[1,2,0,3,2,0,0,3,4]})
我想生成这个DF:

data2= DataFrame({'AA':'a','d','h'],'BB':[3,5,7]})

一种可能的方法是使用函数cumsum定义一些组:

data = pd.DataFrame({'A':['a','b','c','d','e','f','g','h','i'],'B':[1,2,0,3,2,0,0,3,4]})
data['groups'] = (data['B'] == 0).cumsum() 
# Out 
#    A  B  groups
# 0  a  1       0
# 1  b  2       0
# 2  c  0       1
# 3  d  3       1
# 4  e  2       1
# 5  f  0       2
# 6  g  0       3
# 7  h  3       3
# 8  i  4       3
然后,使用输出索引定义一个数组,除了第一个索引外,其他索引都位于每个组第一次出现的索引之下:

indexes = data.loc[data.drop_duplicates('groups').index.values+1]['A'].values
indexes[0] = data['A'].values[0]
最后,通过分组,对每个组的a列求和,并分配新的AA列

sum_data = data.groupby('groups').sum().assign(AA=indexes).reset_index(drop=True)
# Out
#    B AA
# 0  3  a
# 1  5  d
# 2  0  g
# 3  7  h
如果存在第[2,0,g]行会造成麻烦,则可以添加最后一行:

sum_data = sum_data[sum_data['B'] != 0]
# Out
#    B AA
# 0  3  a
# 1  5  d
# 3  7  h

到目前为止,您尝试了什么?我唯一能做的就是使用循环求和,当遇到0时,停止并循环下一节。在DataFrame中应该有一种更简单的方法。将“AA”列保留为“a”、“d”、“h”是否重要?@xg.plt.py是的,这很重要,在实际情况下,AA列记录日期。完美的解决方案,积数函数非常棒。。谢谢你,伙计!