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

在Python中基于另一变量统计分组变量数量的方法

解决分组转化用户统计的最优方法

嘿,我来帮你搞定这个统计问题!你要的是同时满足分组条件和转化条件的用户数量(也就是两个集合的交集计数),之前的方法要么算成了并集,要么groupby的用法没到位,下面给你几个最优的实现方式,分两种常见场景来说:

场景1:所有数据在同一个DataFrame里

假设你的数据存在一个叫df的DataFrame中,包含group列(取值为control/treatment)和is_convert列(标记用户是否转化,比如布尔值True/False或者数值1/0)。

方法1:直接筛选计数(最直观)

直接用布尔索引筛选出同时满足两个条件的行,然后统计数量:

# 统计control组且转化的用户数
control_convert_count = len(df[(df['group'] == 'control') & df['is_convert']])

# 统计treatment组且转化的用户数
treatment_convert_count = len(df[(df['group'] == 'treatment') & df['is_convert']])

方法2:groupby聚合(一次统计两组)

先筛选出所有转化的用户,再按分组聚合计数,一次得到两组结果:

# 只保留转化用户,按group分组统计user_id的数量
convert_group_counts = df[df['is_convert']].groupby('group')['user_id'].count()

# 提取对应分组的数量,没有的话默认0(避免KeyError)
control_convert_count = convert_group_counts.get('control', 0)
treatment_convert_count = convert_group_counts.get('treatment', 0)

方法3:交叉表统计(更清晰展示整体情况)

用pd.crosstab生成分组和转化状态的交叉统计表,能直观看到所有组合的数量:

import pandas as pd

cross_table = pd.crosstab(df['group'], df['is_convert'])
# 假设is_convert为True代表转化,提取对应值
control_convert_count = cross_table.loc['control', True]
treatment_convert_count = cross_table.loc['treatment', True]

场景2:分组数据和转化数据是两个独立的表

如果control、treatment是单独的表,convert是另一个包含所有转化用户ID的表,推荐用集合交集来统计,效率很高:

# 把各组的user_id转成集合
control_user_set = set(control['user_id'])
treatment_user_set = set(treatment['user_id'])
convert_user_set = set(convert['user_id'])

# 求交集的长度就是同时满足两个条件的用户数
control_convert_count = len(control_user_set & convert_user_set)
treatment_convert_count = len(treatment_user_set & convert_user_set)

为什么你之前的方法不对?

你之前用control.user_id.count() + convert.user_id.count(),这是把control组总人数和转化组总人数相加,算的是两个集合的并集(还重复计算了同时属于两组的用户),而我们需要的是交集——也就是既在control组又在转化组的用户数,这完全是两个概念哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:04:10