使用pandas Grouper实现以数据集最晚日期为周尾的按周聚合
解决方法
适用pandas >=1.1.0版本(最简便方案)
核心逻辑:用固定7天为周期替代默认绑定固定周结束日的周频率,将分组锚点设置为数据集最晚日期,即可实现从最晚日期往前倒推每7天为一个周期的聚合效果。
# 第一步先获取数据集的最晚日期 latest_date = fp['date'].max() # 自定义周期聚合 res = fp.groupby( pd.Grouper( key='date', freq='7D', origin=latest_date, closed='right', label='right' ) ).collectionName.nunique().tail(10)
参数说明:
freq='7D':固定7天为一个统计周期,不受默认周结束日规则限制origin=latest_date:将周期分组的锚点设置为数据集最晚日期,所有分组会从该日期往前每7天切割closed='right':每个周期包含右边界的日期,符合常规周聚合的统计逻辑label='right':分组结果的索引用每个周期的右边界(即7天周期的结束日)显示,和原有输出格式保持一致
低版本pandas兼容方案
如果你的pandas版本不支持origin参数,可以手动计算分组标签实现需求:
latest_date = fp['date'].max() # 计算每个日期和最晚日期的天数差,除以7得到分组编号 fp['week_group'] = ((latest_date - fp['date']).dt.days // 7) # 按分组编号聚合后转换为周期结束日期标签 res = fp.groupby('week_group').collectionName.nunique().reset_index() res['date'] = latest_date - pd.to_timedelta(res['week_group'] * 7, unit='D') res = res.set_index('date')['collectionName'].sort_index().tail(10)
运行后输出的最后一个分组索引即为2021-12-02,前面的分组依次为2021-11-25、2021-11-18等,完全符合倒推7天为一个周期的需求。
内容的提问来源于stack exchange,提问作者joe8ones
相关产品推荐
相关产品推荐

