每个日期最近7天的汇总数据

时间:2018-11-14 17:04:52

标签: python pandas date grouping

我有一个数据集:

 app id geo  date        count
    90  NO  2018-09-04  27
    66  HK  2018-09-03  2
    66  HK  2018-09-02  4   
    80  QA  2018-04-22  5  
    85  MA  2018-04-20  1   
    80  BR  2018-04-19  68

我正在尝试生成一个字段,该字段将汇总过去7天每个日期的数据。我的数据集应如下所示:

 app id geo  date        count   count_last_7_days
        90  NO  2018-09-04  27    33
        66  HK  2018-09-03  2     6
        66  HK  2018-09-02  4     4
        80  QA  2018-04-22  5     74
        85  MA  2018-04-20  1     69
        80  BR  2018-04-19  68    68

我正在尝试以下代码:

 df['date'] = pd.to_datetime(df['date']) - pd.to_timedelta(7, unit='d')
    df = df.groupby(['geo','app_id', pd.Grouper(key='date', freq='W')]) . 
   ['count'].sum().reset_index().sort_values('date')

但是,即使以为我以每周一次(freq='W'的频率使用石斑鱼,它考虑了星期日的一周开始时间,对于非星期日的条目我没有7天的滞后时间。

请建议我如何计算该字段。

1 个答案:

答案 0 :(得分:0)

一个肮脏的单线将是

import numpy as np
df['count_last_7_days'] = [np.sum(df['count'][np.logical_and(df['date'][i] - df['date'] < pd.to_timedelta(7,unit='d'),df['date'][i] - df['date'] >= pd.to_timedelta(0,unit='d'))]) for i in range(df.shape[0])]

请注意,我首先使用timepd.to_datetime()列转换为日期时间。

这是什么:每天,它会在所需的一周内找到所有其他行,并用布尔值标记它们,然后将它们相加