执行groupby以查找日期范围之间分配ID的累计计数

Cur*_*ous 5 python pandas

我在作业ID级别有一个数据框,其中包括提交日期,学生ID。我想查找最近12个月中学生提交的作业数量(不包括最新条目)。分配ID是唯一键。我希望以累计编号作为累积编号。

我尝试使用groupby来执行此步骤,但找不到所需的输出。我想要我在python中的答案。

是)我有的

Assmt id    student id  date of submission
106473754   100357          2/1/2016
102485554   100357          3/1/2016
108474032   100357          4/1/2016
101663805   100357          2/1/2017
307953885   100364          5/1/2017
307252429   100364          7/1/2017
304205214   100364          11/1/2017
304041247   100364          11/1/2017
512459298   100364          2/1/2018
Run Code Online (Sandbox Code Playgroud)

我想要的是

student id  date of submission  count_in_12_mon
100357            2/1/2017                       3
100364            2/1/2018                       4
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 1

您可能需要max使用 查找每个组的值transform,然后将其转换datetime为月份并与所有组 date of submission进行比较,然后使用agg

s=df.groupby('studentid')['dateofsubmission'].transform('max')
s1=(s.dt.year*12+s.dt.month-df.dateofsubmission.dt.year*12-df.dateofsubmission.dt.month)
df['New']=((s1>0)&(s1<=12))
yourdf=df.groupby('studentid').agg({'New':'sum','dateofsubmission':'last'}).reset_index()
yourdf
Out[851]: 
   studentid dateofsubmission  New
0     100357       2017-02-01  3.0
1     100364       2018-02-01  4.0
Run Code Online (Sandbox Code Playgroud)