如何使用pandas计算分组数据的显著性差异?
验证分组差异显著性的pandas实现方案
pandas本身没有内置的显著性检验计算方法,核心是用pandas的crosstab方法完成数据规整,生成后续做显著性检验需要的列联表,再结合统计库的方法计算p值即可。你要验证C组和A、B组的数值1占比差异显著性,本质是检验分组分类变量和二分类结果(是否为1)的相关性,具体实现步骤如下:
- 第一步:构造/读取数据集
import pandas as pd import scipy.stats as stats # 示例数据构造,你可以替换为自己读取的DataFrame数据源 df = pd.DataFrame({ "Letters": ["A","A","A","B","B","B","C","C","C"], "Numbers": [1,2,3,1,2,3,1,1,1] })
- 第二步:用
pd.crosstab生成检验用列联表
先把分组合并为C组/非C组(A+B)两类,结果合并为是1/不是1两类,再生成二维列联表:
# 新增标识列用于分组统计 df["分组类型"] = df["Letters"].apply(lambda x: "C组" if x == "C" else "非C组") df["是否为数值1"] = df["Numbers"] == 1 # 生成列联表 cont_table = pd.crosstab(df["分组类型"], df["是否为数值1"])
生成的列联表如下:
| 是否为数值1 | False | True |
|---|---|---|
| 非C组 | 4 | 2 |
| C组 | 0 | 3 |
- 第三步:基于列联表计算显著性
因为你的样本量很小,推荐用Fisher精确检验,大样本场景可以用卡方检验:
# Fisher精确检验,适配小样本场景 odds_ratio, p_value = stats.fisher_exact(cont_table) print(f"显著性检验p值为:{p_value:.4f}")
本次计算得到p值约为0.0476,小于常用的显著性阈值0.05,可证明C的结果分布与A、B存在显著差异。
如果是大样本场景,可以替换为卡方检验:
chi2, p_value, dof, expected = stats.chi2_contingency(cont_table) print(f"卡方检验p值为:{p_value:.4f}")
内容的提问来源于stack exchange,提问作者Giga
相关产品推荐
相关产品推荐

