我有一个数据集:
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天的滞后时间。
请建议我如何计算该字段。
答案 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])]
请注意,我首先使用time
将pd.to_datetime()
列转换为日期时间。
这是什么:每天,它会在所需的一周内找到所有其他行,并用布尔值标记它们,然后将它们相加