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

如何通过循环实现多组Identifier间的t-test两两对比?

实现多组Identifier的两两t-test对比

首先先回顾你的测试数据和单组对比的基础代码:

测试数据定义

import pandas as pd
data = [
    ['green', 7], ['green', 8], ['green', 7],['green', 6], ['green', 8], ['green', 8],
    ['red', 8], ['red', 6], ['red', 7],['red', 2], ['red', 5], ['red', 4],
    ['blue', 8], ['blue', 8], ['blue', 9],['blue', 6], ['blue', 9], ['blue', 9]]
df = pd.DataFrame(data, columns=['Identifier', 'Number'])

单组对比示例

from scipy.stats import ttest_ind

ttest_ind(
    df[df['Identifier']=='green']['Number'], 
    df[df['Identifier']=='red']['Number'])

接下来给你两种高效实现所有组两两对比的方案:


方案一:用itertools.combinations生成不重复组合(推荐)

手动嵌套循环容易出现重复对比(比如先跑green-red再跑red-green),用itertools.combinations可以直接生成所有不重复的两两组合,代码更简洁且避免冗余计算:

from scipy.stats import ttest_ind
import itertools

# 获取所有唯一的Identifier分组
unique_groups = df['Identifier'].unique()

# 遍历所有两两组合
for group1, group2 in itertools.combinations(unique_groups, 2):
    # 提取两组的Number数据
    group1_data = df[df['Identifier'] == group1]['Number']
    group2_data = df[df['Identifier'] == group2]['Number']
    
    # 执行t-test(默认方差齐性,若需Welch检验加equal_var=False)
    t_stat, p_value = ttest_ind(group1_data, group2_data)
    
    # 打印结果
    print(f"对比组: {group1} vs {group2}")
    print(f"t统计量: {t_stat:.4f}, p值: {p_value:.4f}\n")

方案二:将结果整理为DataFrame(便于后续分析)

如果需要把所有对比结果结构化保存,方便查看或进一步处理,可以把结果存入新的DataFrame:

from scipy.stats import ttest_ind
import itertools
import pandas as pd

unique_groups = df['Identifier'].unique()
results = []

for group1, group2 in itertools.combinations(unique_groups, 2):
    group1_data = df[df['Identifier'] == group1]['Number']
    group2_data = df[df['Identifier'] == group2]['Number']
    t_stat, p_value = ttest_ind(group1_data, group2_data)
    
    # 将结果添加到列表
    results.append({
        'Group1': group1,
        'Group2': group2,
        't_statistic': round(t_stat, 4),
        'p_value': round(p_value, 4)
    })

# 转换为DataFrame
results_df = pd.DataFrame(results)
print(results_df)

注意事项

  • 默认的ttest_ind假设两组数据方差齐性,如果你的数据不满足这个假设,可以添加参数equal_var=False,执行Welch's t-test(更适合方差不齐的情况)。
  • 如果你的数据集非常大,这种循环方式依然高效,因为combinations只会生成必要的组合,不会做重复计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:25:13