Python 如何使用cumsum跳过第一个条目?

Python 如何使用cumsum跳过第一个条目?,python,pandas,cumsum,Python,Pandas,Cumsum,我有一个DF,它包含某些项目的几个创建者的ID以及他们的项目随着时间的推移的结果。 每个项目可以是成功(结果=1)或失败(结果=0)。 DF如下所示: creator_id outcome 1 1 1 1 2 1 2 0 2 1

我有一个DF,它包含某些项目的几个创建者的ID以及他们的项目随着时间的推移的结果。 每个项目可以是成功(结果=1)或失败(结果=0)。 DF如下所示:

creator_id    outcome  
    1             1           
    1             1         
    2             1           
    2             0          
    2             1 

      
我正在寻找一种方法来创建两个新专栏:以前的项目和以前的成功

第一个应该是任何创建者以前的项目的累积数量。鉴于我已经按创建者和创建日期订购了DF,我知道我可以通过运行以下代码来完成这一点:

df['prev_project']=df.groupby(['creator_id']).cumcount()
df['prev_success']=df.groupby(['creator_id'])['outcome'].cumsum()
我的问题是,我不知道如何创建以前成功的专栏。 我尝试运行以下代码:

df['prev_project']=df.groupby(['creator_id']).cumcount()
df['prev_success']=df.groupby(['creator_id'])['outcome'].cumsum()
这段代码的问题是它立即开始计数(第x行的成功计数为第x行项目的上一次成功计数)。 此外,我对结果路径不一致的项目存在问题,即一个创建者的顺序是:成功、失败、成功

理想情况下,我的DF应该如下所示:

creator_id outcome  prev_projects  prev_success
1             1           0              0
1             1           1              1
2             1           0              0
2             0           1              1
2             1           2              1
请注意创建者id编号2所需的特殊顺序。
希望一切都清楚

您可以使用
shift
fillna
从0:

df['outcome_shifted']=df.groupby(['creator_id'])['outcome'].shift().fillna(0)
df['prev_success']=df.groupby(['creator_id'])['outcome_shifted'].cumsum()
df
印刷品

creator_id  outcome prev_success    outcome_shifted
0   1       1       0.0             0.0
1   1       1       1.0             1.0
2   2       1       0.0             0.0
3   2       0       1.0             1.0
4   2       1       1.0             0.0

您可以使用
shift
fillna
从0开始
cumsum

df['outcome_shifted']=df.groupby(['creator_id'])['outcome'].shift().fillna(0)
df['prev_success']=df.groupby(['creator_id'])['outcome_shifted'].cumsum()
df
印刷品

creator_id  outcome prev_success    outcome_shifted
0   1       1       0.0             0.0
1   1       1       1.0             1.0
2   2       1       0.0             0.0
3   2       0       1.0             1.0
4   2       1       1.0             0.0