计算Pandas中滚动天数窗口内发生的groupby行数

我有以下数据框:

import pandas as pd
#Create DF
d = {'Name': ['Jim','Jim','Jim', 'Jim','Jack','Jack'], 
     'Date': ['08/01/2021','27/01/2021','05/02/2021','10/02/2021','26/01/2021','20/02/2021']}

              
df = pd.DataFrame(data=d)
df['Date'] = pd.to_datetime(df.Date,format='%d/%m/%Y')
df

我想添加一列(到同一个数据框),计算过去 28 天内发生的次数,按Name. 有谁知道在 200,000 行代码中执行此操作的最有效方法?大约有 1000 个不同Name的?

新的列值应该是1,2,3,3,1,2。任何帮助将非常感激!谢谢!

回答

将数据帧的索引设置为Date,然后将帧分组Name并应用rolling count具有偏移量的关闭窗口28 days

df['count'] = df.set_index('Date')
                .groupby('Name', sort=False)['Name']
                .rolling('28d', closed='both').count().tolist()

   Name       Date  count
0   Jim 2021-01-08    1.0
1   Jim 2021-01-27    2.0
2   Jim 2021-02-05    3.0
3   Jim 2021-02-10    3.0
4  Jack 2021-01-26    1.0
5  Jack 2021-02-20    2.0


以上是计算Pandas中滚动天数窗口内发生的groupby行数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>