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

如何为Pandas DataFrame按Campaign分组添加有序周次列(week#)

为每个Campaign分组生成周数序号列

现有如下Pandas数据框:

import pandas as pd

d = {'campaign': ['Fresh', 'Fresh', 'Fresh', 'General', 'General', 'Grocery', 'Grocery', 'Grocery'], 
     'week': ['7-4-22', '7-11-22', '7-18-22', '5-2-22', '5-9-22', '2-7-22',' 2-14-22',' 2-21-22']}

df = pd.DataFrame(data=d)

需要实现:无需手动编码,新增一列week#,按每个campaign内的顺序统计周数,最终得到如下结果:

d = {'campaign': ['Fresh', 'Fresh', 'Fresh', 'General', 'General', 'Grocery', 'Grocery', 'Grocery'], 
     'week': ['7-4-22', '7-11-22', '7-18-22', '5-2-22', '5-9-22', '2-7-22',' 2-14-22',' 2-21-22'], 
     'week#':[1,2,3,1,2,1,2,3] }

df = pd.DataFrame(data=d)

且week#需要作为序数变量。


解决方案

可以用Pandas的groupby()结合cumcount()方法快速实现,同时将结果转为序数类型,步骤如下:

完整代码

import pandas as pd

# 初始化原始数据框
d = {'campaign': ['Fresh', 'Fresh', 'Fresh', 'General', 'General', 'Grocery', 'Grocery', 'Grocery'], 
     'week': ['7-4-22', '7-11-22', '7-18-22', '5-2-22', '5-9-22', '2-7-22',' 2-14-22',' 2-21-22']}
df = pd.DataFrame(data=d)

# 按campaign分组生成从1开始的周序号
df['week#'] = df.groupby('campaign').cumcount() + 1

# 将week#转为序数变量,确保系统识别其顺序关系
df['week#'] = pd.Categorical(df['week#'], ordered=True, categories=sorted(df['week#'].unique()))

# 查看最终结果
print(df)

代码说明

  • df.groupby('campaign').cumcount():对每个campaign分组内的行按现有顺序从0开始计数,加1后得到从1起始的周序号,完全匹配需求格式
  • pd.Categorical(..., ordered=True):将列转为序数类型,后续做统计分析时,系统会识别其顺序逻辑(1<2<3),而非普通无顺序的分类变量

内容的提问来源于stack exchange,提问作者GioC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:09:23