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

如何用Pandas透视表或groupby计算分组条件下的概率百分比

计算Control/Treatment组中True/False的概率

先构造示例DataFrame方便演示:

import pandas as pd
import numpy as np

np.random.seed(42)
df = pd.DataFrame({
    'group': np.random.choice(['control', 'treatment'], size=100),
    'result': np.random.choice([True, False], size=100)
})

方法一:使用groupby实现

直接通过分组+值计数归一化,一步得到概率:

# 分组计算各结果的概率,转成宽表格式
prob_groupby = df.groupby('group')['result'].value_counts(normalize=True).unstack()
# 保留两位小数优化可读性
prob_groupby = prob_groupby.round(2)
print(prob_groupby)

输出示例:

result      False  True 
group                  
control      0.52   0.48
treatment    0.47   0.53
  • groupby('group') 按control/treatment拆分数据
  • value_counts(normalize=True) 计算组内每个结果的占比(概率)
  • unstack() 将行索引中的True/False转为列,让结果更直观

方法二:使用pivot_table实现

先统计每组各结果的数量,再计算占比得到概率:

# 统计每组各结果的出现次数
count_pivot = pd.pivot_table(
    df,
    index='group',
    columns='result',
    aggfunc='size',
    fill_value=0  # 填充可能的缺失值(比如某组无某个结果)
)

# 计算每行(组)的结果占比
prob_pivot = count_pivot.div(count_pivot.sum(axis=1), axis=0).round(2)
print(prob_pivot)

输出和groupby方法一致。

  • aggfunc='size' 用于统计每组各结果的数量
  • div(count_pivot.sum(axis=1), axis=0) 让每行的数值除以该行总数,得到概率

提取单个组的概率

如果需要单独查看某组的特定结果概率,直接从结果中提取即可:

# 获取treatment组False的概率
treatment_false_prob = prob_groupby.loc['treatment', False]
print(f"Treatment组False的概率:{treatment_false_prob}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:00:58