如何在DataFrame中实现循环批量执行独立样本t检验并生成结果表
批量独立样本t检验函数实现
我有一个大型DataFrame,想要用ttest_ind执行独立样本t检验,对比两组(比如对照组A和治疗组B)定量变量的均值差异(比如血氧水平)。因为要分析的定量变量很多,我需要写一个具备以下功能的函数:
- 按分组列拆分数据
- 对每个指定的定量变量执行t检验
- 将所有检验结果整理成一个DataFrame
我已经有单变量分析的代码,但不知道怎么加循环实现批量处理,希望能写一个可以传入DataFrame的通用函数,避免重复操作。现有单变量代码如下:
#Sat Ox 3 #提取分组数据 grupoA= df[df['Grupo ']=='A']['Sat de oxigeno 3'] grupoB= df[df['Grupo ']=='B']['Sat de oxigeno 3'] #执行t检验 x18=ttest_ind(grupoA, grupoB) #将结果存入DataFrame tablaT = pd.DataFrame((x7,x8,x9, x10, x11,x12,x13,x14,x15,x16,x17,x18), columns=['T-test', 'p-value'], index=['Frecuencia1', 'Frecuencia2', 'Frecuencia3', 'PresionSistolica1', 'PresionSistolica2', 'PresionSistolica3', 'PresionDiastolica1', 'PresionDiastolica2', 'PresionDiastolica3', 'SaturacionOx1', 'SaturacionOx2', 'SaturacionOx3']) tablaT
通用批量处理函数
下面是一个可复用的函数,能自动完成分组、循环检验和结果整理:
import pandas as pd from scipy.stats import ttest_ind def batch_ttest_ind(df, group_col, target_vars): results = [] for var in target_vars: # 提取两组数据并剔除缺失值 group_a = df[df[group_col] == 'A'][var].dropna() group_b = df[df[group_col] == 'B'][var].dropna() # 执行t检验,方差不齐时可设equal_var=False t_stat, p_val = ttest_ind(group_a, group_b, equal_var=True) # 收集结果并保留4位小数 results.append({'变量名': var, 'T值': round(t_stat, 4), 'p值': round(p_val, 4)}) # 转换为结构化DataFrame return pd.DataFrame(results).set_index('变量名')
使用示例
直接传入你的DataFrame、分组列名和要检验的变量列表即可:
# 定义需要分析的定量变量列表 target_vars = [ 'Frecuencia1', 'Frecuencia2', 'Frecuencia3', 'PresionSistolica1', 'PresionSistolica2', 'PresionSistolica3', 'PresionDiastolica1', 'PresionDiastolica2', 'PresionDiastolica3', 'SaturacionOx1', 'SaturacionOx2', 'SaturacionOx3' ] # 生成结果表 tablaT = batch_ttest_ind(df, 'Grupo ', target_vars) # 查看结果 display(tablaT)
关键细节说明
- 缺失值处理:用
dropna()自动过滤每组中的缺失数据,避免检验报错 - 方差适配:如果两组数据方差不齐,将
equal_var设为False即可执行Welch's t检验 - 结果可读性:结果保留4位小数,以变量名为索引,便于查看和后续分析
- 扩展性:只需修改
target_vars列表就能增减分析变量,无需改动函数逻辑
内容的提问来源于stack exchange,提问作者Nicole Morveli
相关产品推荐
相关产品推荐

