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

如何在含重复数据的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}")

代码解释

  1. groupby('user'):将同一用户的所有观测记录归为一组;
  2. .any():对每组内的步骤列进行判断,只要组内有一个True,结果即为True(代表该用户完成此步骤);
  3. .mean():将True视为1、False视为0,计算列的均值,得到完成该步骤的用户占总用户数的比例;
  4. .round(2):将结果保留两位小数,匹配预期格式。

运行结果

step_1 = 1.00
step_2 = 1.00
step_3 = 0.33

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:24:46