我有一个数据集:
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/