使用Pandas按日期分组统计事件时将周起始设为周日
调整Pandas周统计的起始日为周日
没问题,这事儿好办!你现在遇到的是Pandas默认周周期(周一到周日)不符合需求的情况,要改成周日到周六的周范围,只需要在分组时指定对应的周频率即可。
核心思路
Pandas的to_period("W")默认采用的是W-SUN频率(每周日结束,对应周范围周一到周日)。要改成周日起始、周六结束的周,我们需要指定频率为W-SAT(每周六结束,自然周范围就是上周日到本周六)。
修改后的代码
把你原来的代码稍作调整,替换周频率参数:
df['date'].groupby(df.date.dt.to_period("W-SAT")).agg('count')
执行这段代码后,分组结果的周范围就会变成你期望的2018-04-15/2018-04-21、2018-04-22/2018-04-28格式,统计的数量也会和原数据对应上。
另一种灵活写法(用pd.Grouper)
如果你需要更灵活的分组控制,也可以用pd.Grouper来实现:
df.groupby(pd.Grouper(key='date', freq='W-SAT'))['date'].count()
效果和上面的代码完全一致,只是写法更偏向于显式分组配置。
验证逻辑
举个例子:原数据中2018-04-16(周一)到2018-04-22(周日)的40条数据,会被W-SAT频率分到2018-04-15/2018-04-21这个周日到周六的周期里;而原2018-04-23(周一)到2018-04-29(周日)的数据,其中2018-04-23到2018-04-28(周六)的部分会进入2018-04-22/2018-04-28周期,完美匹配你的期望。
内容的提问来源于stack exchange,提问作者Imsa
相关产品推荐
相关产品推荐

