如何计算数据集中回头客占比并存储为prop_returning变量
计算回头客占比的解决方案
问题背景
现有包含cust_id、prod_title等字段的数据集,需计算**回头客(cust_id重复出现的客户)**的占比并存储为变量prop_returning。此前尝试用df_cleaned.duplicated('cust_id')筛选重复行,再用value_counts统计,但无法获取可直接用于计算的数值。
数据集示例
cust_id prod_title total_sales trans_timestamp 0 1001015 All Veggie Yummies 72.99 2021-03-30 10:06:05.108653 1 1001019 Ball and String 18.95 2021-03-30 10:07:01.746945 2 1022098 Cat Cave 28.45 2021-03-30 10:10:41.387170 3 1022157 Chewie Dental 24.95 2021-03-30 10:20:11.571311 4 1022189 Chomp-a Plush 60.99 2021-03-30 10:33:11.289467 5 1002664 Feline Fix Mix 65.99 2021-03-30 10:37:55.446798 6 1002666 Fetch Blaster 9.95 2021-03-30 10:39:36.488829 7 1002175 Foozy Mouse 45.99 2021-03-30 10:43:21.490817 8 1002666 Kitty Climber 35.99 2021-03-30 10:51:31.510563 9 1022189 Purr Mix 32.99 2021-03-30 11:01:50.082440 10 1011924 Fetch Blaster 19.90 2021-03-30 11:11:15.944726 11 1022236 Purr Mix 98.97 2021-03-30 11:15:39.390134 12 1022189 Cat Cave 56.90 2021-03-30 11:21:10.167505 13 1002137 Purrfect Puree 54.95 2021-03-30 11:27:51.133318 14 1002159 Foozy Mouse 91.98 2021-03-30 11:29:00.292890 15 1002175 Reddy Beddy 21.95 2021-03-30 11:30:22.928818 16 1002108 Cat Cave 85.83 2021-03-30 11:34:35.776578 17 1002186 Scratchy Post 48.95 2021-03-30 10:39:28.604007 18 1002175 Snack-em Fish 15.99 2021-03-30 10:39:40.349882 19 1002261 Snoozer Essentails 99.95 2021-03-30 10:51:31.510563 20 1002666 Scratchy Post 48.95 2021-03-30 11:01:28.024109 21 1002159 Purrfect Puree 219.80 2021-03-30 11:11:15.944726 22 1002680 Chewie Dental 49.90 2021-03-30 11:15:39.390134 23 1002678 Reddy Beddy 65.85 2021-03-30 11:21:10.167505 24 1013769 The New Bone 71.96 2021-03-30 11:27:17.147159 25 1013859 Reddy Beddy 109.75 2021-03-30 11:28:48.669564
此前尝试的代码
duplicate = df_cleaned[df_cleaned.duplicated('cust_id')] duplicate['cust_id'].value_counts() df_cleaned['cust_id'].value_counts()
问题分析
df_cleaned.duplicated('cust_id')返回的是除首次出现外的重复行标记,筛选出的是重复交易记录,而非重复客户。用value_counts统计这些重复行的cust_id,得到的是每个回头客的重复交易次数,无法直接得到回头客的数量,因此无法计算占比。
解决方案
核心思路:先统计每个客户的交易次数,再计算交易次数≥2的客户数占总客户数的比例。
完整代码
# 统计每个客户的交易次数,索引为cust_id,值为对应交易次数 cust_trans_counts = df_cleaned['cust_id'].value_counts() # 计算回头客数量:统计交易次数≥2的客户总数 returning_customers = sum(cust_trans_counts >= 2) # 计算总客户数量:唯一cust_id的总数 total_customers = len(cust_trans_counts) # 计算回头客占比并存储 prop_returning = returning_customers / total_customers
代码解释
value_counts()直接统计每个cust_id的出现次数,结果包含所有唯一客户及其交易次数。sum(cust_trans_counts >=2)将每个客户的交易次数与2比较,生成布尔值数组后求和,得到回头客的数量(True对应1,False对应0)。len(cust_trans_counts)获取唯一客户的总数,因为value_counts()的结果长度等于唯一客户数。- 最后用回头客数除以总客户数,得到占比。
示例验证
以提供的数据集为例:
- 回头客为
1022189、1002666、1002175、1002159,共4个 - 总客户数为19个
- 回头客占比为
4/19 ≈ 0.2105
内容的提问来源于stack exchange,提问作者Ellendejefferes
相关产品推荐
相关产品推荐

