Python 如何在大熊猫身上用重置进行累积条纹

Python 如何在大熊猫身上用重置进行累积条纹,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有以下数据帧: df = pd.DataFrame({'col1':['A','A','A','A','A','A','A','B','B','B','B','B','B','B'],'col2':[1,1,1,0,1,1,1,1,0,1,1,0,0,0],'col3':[.5,.5,.3,.2,.1,.4,.7,.4,.5,.3,.2,.4,.5,.6]}) 我需要一个col3的运行和,但是只要col1发生变化或者col2中有零,这个和就应该重置。我应该返回如下内容: 我尝试了以下方法:

我有以下数据帧:

df = pd.DataFrame({'col1':['A','A','A','A','A','A','A','B','B','B','B','B','B','B'],'col2':[1,1,1,0,1,1,1,1,0,1,1,0,0,0],'col3':[.5,.5,.3,.2,.1,.4,.7,.4,.5,.3,.2,.4,.5,.6]})
我需要一个col3的运行和,但是只要col1发生变化或者col2中有零,这个和就应该重置。我应该返回如下内容:

我尝试了以下方法:

df['cum'] = df.groupby([df.col1, df.col2]).col3.cumsum()
但是,它没有正确重置。它会重置,但会继续对后续行进行求和

在这里拍摄

zeros = df.col2.eq(0)
vals = df.groupby(['col1', df.col2.ne(df.col2.shift()).cumsum()]).col3.cumsum()

df['id'] = np.where(zeros, 0, vals)

说明:


无论何时
col2
0
,只要设置
0
。否则,只需设置分组值的
cumsum

@pandachii很高兴我能帮忙;)我意识到了一个错误,如果我想在col2中的第一个实例1之后启动cumsum。代码将如何更改?新的预期产量将为0,0.5,0.8,0,0,0.1,0.5,0,0,0,0,3,0,0,0,0,0@pandachii这是哪个输入的预期输出?来自post的原始输入