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