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

标签 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')

但即使我认为我以每周频率使用 Grouper (freq='W' ),它认为星期日是一周的开始,而且我没有 7 天的延迟用于非星期日条目。

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

最佳答案

肮脏的单线会是

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])]

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

它所做的是:对于每一天,它都会在所需的一周时间跨度内找到所有其他行,用 bool 值标记它们并在之后对它们求和

关于python - 每个日期最近 7 天的汇总数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53305375/

相关文章:

Python 单击多个命令名称

python - 导入错误 : No module named test. session 处理程序

python - 如何在numpy数组中查找切片对象

python - 使用半正矢距离公式从经度和纬度获取距离

python - 如何在 Pandas DataFrame 中使用 json_normalize 访问特定字段

python - 如何检查 numpy/pandas 对象,即 R 中的 str()

python - 有条件地替换 NaN

postgresql - Postgres 生日选择

regex - 正则表达式匹配日期中的有效日期

parsing - 如何: parse a string 'mm/yyyy' into a date in PHP5. 3?