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

如何计算数据集中回头客占比并存储为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

代码解释

  1. value_counts()直接统计每个cust_id的出现次数,结果包含所有唯一客户及其交易次数。
  2. sum(cust_trans_counts >=2)将每个客户的交易次数与2比较,生成布尔值数组后求和,得到回头客的数量(True对应1,False对应0)。
  3. len(cust_trans_counts)获取唯一客户的总数,因为value_counts()的结果长度等于唯一客户数。
  4. 最后用回头客数除以总客户数,得到占比。

示例验证

以提供的数据集为例:

  • 回头客为1022189、1002666、1002175、1002159,共4个
  • 总客户数为19个
  • 回头客占比为4/19 ≈ 0.2105

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:01:07