计算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