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

如何按用户ID构建购买序列、生成相邻商品对并计算累计消费额

实现方法

基于pandas实现即可,核心逻辑是按用户分组后,通过偏移取相邻上一位置的商品作为前序商品,同时累计求和计算累计消费额,最后过滤掉无前置商品的首单记录。

操作步骤

  • 先对原始数据排序:严格按照user_id分组维度、sequence升序排列,避免原数据存储顺序错乱导致的配对错误
  • 分组计算衍生字段:
    • 对每个用户的购买序列,用shift(1)取上一行的商品名,作为source_product
    • 对每个用户的消费金额做累计求和cumsum(),得到购买到当前商品时的累计总消费
  • 整理输出结构:将当前行的商品字段重命名为target_product,删除source_product为空的首条记录(首单没有相邻前序商品,不符合配对要求),保留需要的四个字段即可。

代码示例

import pandas as pd

# 读取/构造你的原始数据,这里用样例数据演示
raw_df = pd.DataFrame({
    'user_id': [1,1,1,2,2,2],
    'sequence': [1,2,3,1,2,3],
    'product': ['A','C','G','B','T','A'],
    'price': [10,15,1,20,45,10]
})

# 排序固定顺序
sorted_df = raw_df.sort_values(by=['user_id', 'sequence']).reset_index(drop=True)

# 分组计算字段
sorted_df['source_product'] = sorted_df.groupby('user_id')['product'].shift(1)
sorted_df['cum_total_price'] = sorted_df.groupby('user_id')['price'].cumsum()

# 整理成目标格式
target_df = sorted_df.rename(columns={'product': 'target_product'})
    .dropna(subset=['source_product'])
    .loc[:, ['user_id', 'source_product', 'target_product', 'cum_total_price']]
    .reset_index(drop=True)

输出结果

运行后得到的target_df和你给出的目标格式完全匹配:

user_idsource_producttarget_productcum_total_price
1AC25
1CG16
2BT65
2TA75

注意:如果原始数据存在同一用户同sequence值的多条记录,需要先按业务规则去重或聚合,否则会出现配对错位的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:48:16