Pandas按周分组数据:为何需提前减去7天?
问题:Pandas按周分组时提前减7天的作用?
我需要对数据按周进行分组,找到如下解决方案:
# Create a dataframe with datetime values df = pd.DataFrame({'date': pd.date_range(start='1/5/2022', freq='D', periods=15), 'sales': [6, 8, 9, 5, 4, 8, 8, 3, 5, 9, 8, 3, 4, 7, 7]}) #convert date column to datetime and subtract one week df['date'] = pd.to_datetime(df['date']) - pd.to_timedelta(7, unit='d') #calculate sum of values, grouped by week df.groupby([pd.Grouper(key='date', freq='W')])['sales'].sum()
我的疑问是:第一步将原始日期减去7天的操作意义何在?所有日期都提前7天对分组有何帮助?是否可以直接执行第二步按周分组操作?
回答
减7天的核心意义:调整周分组的锚点
Pandas中pd.Grouper(freq='W')默认的周划分是以周日为锚点(每周结束于周六,分组标签显示为该周的周日)。
拿示例数据来说,原始起始日期是2022/1/5(周三):
- 直接用默认
W分组,第一组时间范围是2022/1/2(周日)-2022/1/8(周六),仅包含原数据的1/5-1/8这4天;第二组是2022/1/9(周日)-2022/1/15(周六),包含剩下的7天。 - 把所有日期减7天后,原日期2022/1/5变成2021/12/29(周三),此时用
W分组,第一组时间范围是2021/12/26(周日)-2022/1/1(周六),对应原数据的1/5-1/8;第二组是2022/1/2(周日)-2022/1/8(周六),对应原数据的1/9-1/15。
本质上,减7天是为了让分组的时间窗口和业务需求的周划分对齐——比如你可能希望周统计周期是“周一到周日”,或者想让现有数据的起始日期刚好落在分组窗口的开头,通过偏移日期就能实现这种调整。
可以直接执行第二步按周分组吗?
完全可以,但分组结果会和减7天后的不同:
- 直接分组的代码:
df['date'] = pd.to_datetime(df['date']) result = df.groupby([pd.Grouper(key='date', freq='W')])['sales'].sum() print(result)
输出结果:
date 2022-01-09 40 2022-01-16 34 Freq: W-SUN, Name: sales, dtype: int64
- 减7天后分组的输出结果:
date 2021-12-26 30 2022-01-02 44 Freq: W-SUN, Name: sales, dtype: int64
两者的分组标签和统计范围有差异,选择哪种方式完全取决于你的业务逻辑对周划分的要求。
内容的提问来源于stack exchange,提问作者imantha
相关产品推荐
相关产品推荐

