Pandas比对两年DataFrame唯一客户ID 计算门店客户流失数量
解决方法
你原有代码统计的是订单维度的匹配结果,同一个客户多次下单会被重复计数,无法反映真实唯一客户的流失情况。要基于唯一客户统计流失数,可按以下步骤实现:
步骤1:提取两年的唯一客户ID
# 分别提取2017、2018年的唯一客户ID集合 unique_cus_2017 = df[df['OrderYear'] == 2017]['Customer ID'].unique() unique_cus_2018 = df[df['OrderYear'] == 2018]['Customer ID'].unique()
步骤2:计算流失客户数量
流失客户定义为「2017年有消费记录、2018年无任何消费记录的唯一客户」,有两种常用实现方式:
方式1:用pandas的isin方法判断
# 对2017年唯一客户判断是否在2018年客户列表中,取反求和即为流失数 churn_count = sum(~pd.Series(unique_cus_2017).isin(unique_cus_2018)) print(f"2017-2018年流失客户数量:{churn_count}")
方式2:用集合求差集(更直观)
set_2017 = set(unique_cus_2017) set_2018 = set(unique_cus_2018) # 差集即为仅在2017年出现的客户,也就是流失客户 churn_customers = set_2017 - set_2018 churn_count = len(churn_customers) print(f"2017-2018年流失客户数量:{churn_count}")
如果需要额外计算客户留存率,可以加一行代码:
retention_rate = len(set_2017 & set_2018) / len(set_2017) print(f"2017年客户在2018年的留存率:{retention_rate:.2%}")
内容的提问来源于stack exchange,提问作者cped
相关产品推荐
相关产品推荐

