You need to enable JavaScript to run this app. 如何使用Pandas groupby按用户分组生成订单序号索引列
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas groupby按用户分组生成订单序号索引列

pandas实现用户下单序号标记的修改方案

核心需求回顾

给数据集新增orders列,规则如下:

  • 同一用户同一订单的所有商品行序号完全相同
  • 按订单创建时间排序,用户首次下单序号为1,后续依次递增

修改后代码(两种实现可选)

方案1:简洁高效版(无需合并,一行生成结果)

如果user_id + order_completed_at即可唯一标记一笔订单,直接用该代码即可:

df['orders'] = df.groupby('user_id')['order_completed_at']\
                 .transform(lambda x: pd.factorize(x, sort=True)[0] + 1)

如果业务中同一用户同一时间可能有多笔不同订单,需要加上cart作为订单唯一标识,修改为:

df['orders'] = df.groupby('user_id')[['order_completed_at', 'cart']]\
                 .transform(lambda x: pd.factorize(zip(x['order_completed_at'], x['cart']), sort=True)[0] + 1)

方案2:逻辑清晰版(适合需要中间校验订单的场景)

# 提取所有唯一订单,按用户+订单时间排序后生成下单序号
unique_order = df[['user_id', 'order_completed_at']].drop_duplicates().sort_values(['user_id', 'order_completed_at'])
unique_order['orders'] = unique_order.groupby('user_id').cumcount() + 1

# 将序号映射回原数据集
df = df.merge(unique_order, on=['user_id', 'order_completed_at'], how='left')

原代码问题说明

你原来的代码最后一级分组是按cart维度做累计计数,完全没有关联用户维度,且前面的多级分组计数逻辑完全偏离了“按用户维度统计下单次数”的需求,直接替换为上述代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:03:03