如何基于客户邮箱与日期为订单分配对应购买次数整数标识
按客户维度标记订单购买次数的实现方案
以下是不同场景下的落地实现方法:
电子表格(Excel/Google Sheets)实现
- 第一步先将全量数据按「客户邮箱地址」+「下单日期」升序排序,确保同一客户的订单按购买时间从早到晚排列
- 假设A列是下单日期、B列是客户邮箱地址、C列为购买次数标记列,在C2单元格输入公式:
=COUNTIF($B$2:B2, B2),回车后下拉填充整列即可得到数值格式的购买次数 - 若需要显示为「第X次购买」的文本格式,可将公式调整为:
="第"&COUNTIF($B$2:B2, B2)&"次购买"
注意:COUNTIF的第一个参数要使用混合引用锁定起始行,下拉填充时统计范围会逐行向下扩展,只会统计当前行及以上的同邮箱订单数,刚好对应按时间排序后的购买顺序
SQL实现
假设订单表名为order_records,包含字段order_date(下单日期)、customer_email(客户邮箱),直接用窗口函数查询即可:
SELECT order_date, customer_email, ROW_NUMBER() OVER (PARTITION BY customer_email ORDER BY order_date ASC) AS purchase_times FROM order_records;
逻辑说明:
PARTITION BY按客户邮箱分组,ORDER BY按下单日期升序排列,ROW_NUMBER会给每个分组内的行按顺序生成连续序号,就是对应客户的第几次购买
Python Pandas实现(适合大批量数据处理)
先排序再分组生成序号即可:
import pandas as pd # 读取数据后先按客户邮箱、下单日期升序排序 df = df.sort_values(by=['customer_email', 'order_date'], ascending=[True, True]) # 生成数值格式的购买次数,cumcount从0开始计数所以要+1 df['purchase_times'] = df.groupby('customer_email').cumcount() + 1 # 如需转成中文文本格式可以用下面的代码 df['purchase_times_text'] = '第' + df['purchase_times'].astype(str) + '次购买'
内容的提问来源于stack exchange,提问作者manonamission
相关产品推荐
相关产品推荐

