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

统计用户首次折扣消费后后续交易次数的实现方法咨询

实现方案

前置说明

你原有代码存在两个问题:

  • 运算符优先级错误:&优先级高于==,原有逻辑会优先计算1 & df_coup['LOGDATE'],导致输出结果不符合预期,需要给判断条件分别加括号
  • 逻辑偏差:原代码仅筛选了「使用折扣且日期晚于LOGDATE1」的订单,没有关联用户维度的首次折扣时间统计,也没有覆盖用户后续的非折扣交易,不符合需求统计口径

完整实现(无需循环,Pandas向量化操作效率更高)

假设你的数据集包含user_id(用户唯一标识)、LOGDATE(每笔订单交易日期)、DISC_BI(订单是否使用折扣,1为是)三个核心字段,按以下步骤执行:

  1. 预处理日期字段,保证日期比较逻辑正确
import pandas as pd
# 转换为日期格式,可根据实际数据格式调整format参数
df_coup['LOGDATE'] = pd.to_datetime(df_coup['LOGDATE'], format='%Y-%m-%d')
  1. 匹配每个用户的首次折扣消费日期
# 提取所有折扣订单,按用户分组取最小日期即首次折扣消费时间
first_disc_date = df_coup[df_coup['DISC_BI'] == 1].groupby('user_id')['LOGDATE'].min().rename('first_disc_date')
# 把首次折扣时间回拼到原数据集
df_coup = df_coup.join(first_disc_date, on='user_id')
# 筛选出所有有过首次折扣消费的用户的全部订单
target_df = df_coup[df_coup['first_disc_date'].notna()]
  1. 统计每个用户首次折扣后的交易次数
# 标记订单是否为首次折扣之后产生的
target_df['is_post'] = target_df['LOGDATE'] > target_df['first_disc_date']
# 按用户维度统计后续交易次数
user_post_cnt = target_df.groupby('user_id')['is_post'].sum().rename('post_cnt').reset_index()
  1. 计算不复购用户占比
no_repurchase_rate = (user_post_cnt['post_cnt'] == 0).mean()
print(f"首次到店享折扣的用户中有{no_repurchase_rate:.2%}不会复购")

自定义调整参考

  • 如果需要限定复购统计周期(比如统计首次折扣后30天内的复购),可以把target_df['is_post']的判断逻辑调整为:
    target_df['is_post'] = (target_df['LOGDATE'] > target_df['first_disc_date']) & (target_df['LOGDATE'] <= target_df['first_disc_date'] + pd.Timedelta(days=30))
  • 如果需要排除退单、取消订单等无效交易,可以在第一步预处理时先过滤掉无效订单数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:12:03