使用Pandas数据帧统计过去30天内的事件



我有一个pandas数据框,它有一个ID列和一个日期列(YYYY-MM-DD(,

ID 日期
001 2022-01-01
001 2022-01-04
001 2022-02-07
002 2022-01-02
002 2022-01-03
002 2022-01-28

第一个想法是每个集群使用Rolling.count,并删除ID:创建的第一级

df = df.set_index('Date')
df['Ocurrences_last_month'] = (df.groupby('ID')
.rolling('30D')
.count().sub(1).droplevel(0).astype(int))
print (df)
ID  Ocurrences_last_month
Date                                 
2022-01-01   1                      0
2022-01-04   1                      1
2022-02-07   1                      0
2022-01-02   2                      0
2022-01-03   2                      1
2022-01-28   2                      2

编辑:如果可能,双工值创建Series,并通过DataFrame.join:分配给原始DataFrame

s = df.groupby('ID').rolling('30D', on='Date')['Date'].count().sub(1).astype(int)
df = df.join(s.rename('Ocurrences_last_month'), on=['ID','Date'])
print (df)
ID       Date  Ocurrences_last_month
0   1 2022-01-01                      0
1   1 2022-01-04                      1
2   1 2022-02-07                      0
3   2 2022-01-02                      0
4   2 2022-01-03                      1
5   2 2022-01-28                      2

来自评论的替代解决方案:

df = df.merge(s.rename('Ocurrences_last_month'), on=['ID','Date'])

相关内容

  • 没有找到相关文章

最新更新