python - 执行 groupby 以查找日期范围内分配 ID 的累计计数

标签 python pandas

我在作业 ID 级别有一个数据框,其中包括提交日期、学生 ID。我想查找学生在过去 12 个月内提交的作业数量(不包括最新条目)wrt 最新条目。分配 ID 是唯一键。 我希望将累积计数作为分配 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

我想要什么

student id  date of submission  count_in_12_mon
100357            2/1/2017                       3
100364            2/1/2018                       4

最佳答案

您可能需要使用 transform 找到每个组的 max 值,然后将 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

关于python - 执行 groupby 以查找日期范围内分配 ID 的累计计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122144/

相关文章:

Python——在不同的消费者中使用一个生成器

python - bash:字符串插值

python - 在 pandas 中绘制 timedelta 与时间

python - 是否有可能将 pandas/numpy 行中的所有列转换为字节数组?

python - 按列对 pandas 数据框进行切片,显示除提供的列之外的所有内容

python - 合并数据框和重复值

python - Django 单元测试模拟

python - 在 Matplotlib 中生成具有负轴和正轴的散点图

python - HTTP 错误 404 : Not Found Seaborn FacetGrid

python - 创建月末电子表格