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

如何用Python为客户购买历史分配时间顺序订单位置

为客户订单分配顺序位置的解决方案

要实现给每位客户的订单分配顺序编号(同一订单的所有商品行共用同一个编号),可以按以下步骤用Pandas完成:

核心思路

先提取每个客户的唯一订单记录,按订单日期排序后分配序号,再将序号映射回原始数据表的所有行。

实操步骤

  1. 确保日期格式正确
    先把Order Date列转换成datetime类型,避免字符串排序出错:

    df['Order Date'] = pd.to_datetime(df['Order Date'])
    
  2. 生成客户订单的唯一序号
    提取Customer ID和Order Number的唯一组合,按客户分组后,根据Order Date的先后给每个订单分配序号:

    # 获取唯一的客户-订单组合,并保留订单日期
    unique_orders = df[['Customer ID', 'Order Number', 'Order Date']].drop_duplicates()
    # 按客户分组,对订单日期排序后分配序号(dense确保序号连续)
    unique_orders['Order Position'] = unique_orders.groupby('Customer ID')['Order Date'].rank(method='dense', ascending=True).astype(int)
    
  3. 将序号合并回原始数据表
    用merge把生成的序号关联回原数据,保证同一订单的所有商品行都拿到相同的序号:

    df_final = df.merge(unique_orders[['Customer ID', 'Order Number', 'Order Position']], 
                        on=['Customer ID', 'Order Number'], 
                        how='left')
    

验证效果

运行上述代码后,你的示例数据会得到和预期一致的Order Position列:

Customer IDOrder NumberOrder DateItem IDOrder Position
C100003RJSJ00532023-05-08Mouse1
C100002RJSJ00602023-06-09Keyboard1
C100002RJSJ00852023-06-13Computer2
C100002RJSJ00852023-06-13Monitor2
C100003RJSJ00892023-06-13Keyboard2
C100002RJSJ00922023-06-14Headset3

关键说明

  • 使用drop_duplicates避免同一订单被多次计算序号
  • rank(method='dense')保证序号是连续的1、2、3...,不会因为同一天有多个订单出现跳号
  • 用merge关联时,基于Customer ID和Order Number两个字段,确保匹配准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:52:55