对于数据中的每个观察,我都会尝试计算出过去 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 的情况下更快地实现这一点,有什么想法吗?
最佳答案
您可以像下面那样执行此操作(尽管根据数据的结构,我认为您可以更优雅、更高效地执行此操作......我认为这很慢):
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
关于python - 使用 Pandas 计算一段时间内创建的观测值数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22701346/