You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas中按周对透视表日期分组,统计各分类唯一订单数

解决方案

首先确保你的date列已转换为pandas datetime类型,这是时间分组的前提:

df['date'] = pd.to_datetime(df['date'])

方法1:groupby阶段直接按周分组(无需新增列)

使用pd.Grouper可以直接在groupby参数中完成时间粒度转换,完全符合你不需要额外处理、直接在分组阶段完成周聚合的需求:

# 输出长表结构,每行对应 周/品类/子品类 维度的唯一订单数
week_unique_order = df.groupby([
    pd.Grouper(key='date', freq='W'), # 按周分组,默认周日为周结束日
    'category',
    'subcategory'
])['order_id'].nunique().reset_index()

如果需要和你原有代码一致的宽表结构(周作为列维度),可以在后续加pivot转换:

# 转换为宽表,空缺值填充为0
week_unique_order_wide = week_unique_order.pivot(
    index=['category', 'subcategory'],
    columns='date',
    values='order_id'
).fillna(0)

自定义周起始日说明

如果需要调整周的起始时间,比如以周一作为一周的第一天,只需将freq='W'修改为freq='W-MON'即可。

关于resample报错的说明

你遇到的TypeError: resample() got an unexpected keyword argument 'how'报错是因为pandas 0.18版本之后就废弃了resample的how参数,旧教程中的resample('W', how='sum')这类写法已经失效,新版正确的resample写法需要在resample后链式调用聚合方法,但你这个多维度分组的场景用上述groupby+pd.Grouper的写法更简洁,不需要使用resample。

可选方法:先新增周列再分组

如果需要单独保存周字段供后续分析使用,可以先提取周周期列再分组:

# 新增周列,格式为 年-月-日/年-月-日 展示周的起止范围
df['week'] = df['date'].dt.to_period('W')
week_unique_order = df.groupby(['week', 'category', 'subcategory'])['order_id'].nunique().reset_index()

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:06:06