如何在含重复数据的Pandas DataFrame中按唯一字段计算流失率
计算多观测记录下各步骤的用户完成比例
原始数据
生成目标DataFrame的代码:
import numpy as np import pandas as pd df = pd.DataFrame({ 'user' : ['A', 'A', 'B', 'B', 'B', 'C', 'C'], 'step_1' : [True, True, True, True, True, True, True], 'step_2' : [True, False, False, True, False, True, True], 'step_3' : [False, False, False, False, False, True, True] }) print(df)
输出的DataFrame内容:
user step_1 step_2 step_3 0 A True True False 1 A True False False 2 B True False False 3 B True True False 4 B True False False 5 C True True True 6 C True True True
需求说明
需要计算每个步骤的用户完成比例:即有多少比例的用户至少有一条记录中该步骤为True。注意用户可能有多条观测记录,不能直接按用户去重,需确保只要用户有一次完成该步骤就算完成。
预期结果:
- Step 1 = 1.00(所有用户A、B、C都有Step 1为True的记录)
- Step 2 = 1.00(所有用户A、B、C都有Step 2为True的记录)
- Step 3 = 0.33(仅用户C有Step 3为True的记录)
解决方案
核心思路是按用户分组,判断每个用户是否完成对应步骤(即组内是否存在至少一个True),再计算完成用户数占总用户数的比例。
代码实现:
# 按用户分组,判断每个用户是否完成对应步骤 user_step_completion = df.groupby('user')[['step_1', 'step_2', 'step_3']].any() # 计算各步骤完成比例并保留两位小数 completion_rates = user_step_completion.mean().round(2) # 格式化输出结果 for step, rate in completion_rates.items(): print(f"{step} = {rate:.2f}")
代码解释
groupby('user'):将同一用户的所有观测记录归为一组;.any():对每组内的步骤列进行判断,只要组内有一个True,结果即为True(代表该用户完成此步骤);.mean():将True视为1、False视为0,计算列的均值,得到完成该步骤的用户占总用户数的比例;.round(2):将结果保留两位小数,匹配预期格式。
运行结果
step_1 = 1.00 step_2 = 1.00 step_3 = 0.33
内容的提问来源于stack exchange,提问作者TMo
相关产品推荐
相关产品推荐

