使用Pandas计算在一段时间内创建的观察数量

时间:2014-03-27 23:30:52

标签: python pandas

对于我的数据中的每个观察,我试图想出在过去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?

1 个答案:

答案 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