对于我的数据中的每个观察,我试图想出在过去7天内创建的观察数量。
obs date
A 1/1/2000
B 1/4/2000
C 1/5/2000
D 1/10/2000
会变成:
obs date births last week
A 1/1/2000 0
B 1/4/2000 1
C 1/5/2000 2
D 1/10/2000 2
E 1/20/2000 0
是否可以使用rolling_count方法获取此信息?
编辑1:Karl的下方方法运作良好,但有点慢。关于如何更快地实现这一点的任何想法都缺少cython?
答案 0 :(得分:1)
你可以像下面这样做(虽然取决于数据的结构,我认为你可以更优雅和有效地做到这一点......我想这很慢):
import datetime as dt
import pandas as pd
df['date'] = pd.to_datetime(df['date'])
date
obs
A 2000-01-01
B 2000-01-04
C 2000-01-05
D 2000-01-10
E 2000-01-20
def past7(x,df):
back = x['date'] - dt.timedelta(days=7)
return df[(df['date'] >= back) & (df['date'] < x['date'])].count()
df['births_last_7days'] = df.apply(lambda x: past7(x,df),axis=1)
print df
date births_last_7days
obs
A 2000-01-01 0
B 2000-01-04 1
C 2000-01-05 2
D 2000-01-10 2
E 2000-01-20 0