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

使用Pandas计算客户首购及流失回流后的新增获取次数

客户新增获取次数统计实现方案

核心逻辑说明

我们需要统计的「新增获取次数」本质是每个客户独立有效消费周期的数量,满足以下任意一个条件的有效消费(Amt>0)记为一次新增获取:

  • 该记录是对应客户的第一条有效消费记录
  • 该记录与客户上一次有效消费记录之间,存在至少1个周期的无消费间隔(本案例中周期为1个月,可根据实际业务规则调整)

完整实现代码

第一步:数据预处理

先完成日期格式转换和排序,保证时间序列顺序正确:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    'Customer': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B','B','B','B','B','B'],
    'Date': ['1/1/2021', '2/1/2021','3/1/2021', '4/1/2021','5/1/2021', '6/1/2021','7/1/2021', '1/1/2021', '2/1/2021','3/1/2021', '4/1/2021','5/1/2021', '6/1/2021','7/1/2021'], 
    'Amt': [0, 10, 0, 10, 0, 0, 0, 0, 0, 10, 10, 0, 10, 10]
})

# 转换日期格式,按客户+日期升序排序
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y') # 若日期格式为月/日/年可改为 format='%m/%d/%Y'
df = df.sort_values(['Customer', 'Date']).reset_index(drop=True)

第二步:标记新增获取记录

筛选有效消费记录后,通过偏移窗口计算上一次有效消费时间,判断是否为新的消费周期起点:

# 筛选所有有效消费记录
valid_consume_df = df[df['Amt'] > 0].copy()
# 按客户分组,获取上一条有效消费的日期
valid_consume_df['last_consume_date'] = valid_consume_df.groupby('Customer')['Date'].shift(1)
# 计算两次有效消费的月份间隔
valid_consume_df['month_gap'] = (valid_consume_df['Date'].dt.year - valid_consume_df['last_consume_date'].dt.year) * 12 \
                                + (valid_consume_df['Date'].dt.month - valid_consume_df['last_consume_date'].dt.month)
# 标记新增获取:首次消费 或 间隔大于1个月的回流消费
valid_consume_df['is_new_acquisition'] = valid_consume_df['last_consume_date'].isna() | (valid_consume_df['month_gap'] > 1)

第三步:统计结果

统计每个客户的新增获取总次数

acquisition_count = valid_consume_df.groupby('Customer')['is_new_acquisition'].sum().reset_index()
acquisition_count.columns = ['Customer', 'new_acquisition_count']
print(acquisition_count)

输出结果:

Customer  new_acquisition_count
0        A                      2
1        B                      2

完全符合示例要求。

提取每次新增获取的明细日期

acquisition_details = valid_consume_df[valid_consume_df['is_new_acquisition']][['Customer', 'Date']].reset_index(drop=True)
print(acquisition_details)

输出结果:

Customer       Date
0        A 2021-01-02
1        A 2021-01-04
2        B 2021-01-03
3        B 2021-01-06

规则调整说明

如果业务中的流失判定周期不是1个月,比如是连续30天无消费就算流失,只需要将月份间隔的判断替换为天数间隔判断即可:

# 计算两次消费的天数间隔
valid_consume_df['day_gap'] = (valid_consume_df['Date'] - valid_consume_df['last_consume_date']).dt.days
# 间隔超过30天就算回流新增
valid_consume_df['is_new_acquisition'] = valid_consume_df['last_consume_date'].isna() | (valid_consume_df['day_gap'] > 30)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:27:02