如何在Python中创建支持指定数据框和列的T-Test自定义函数
自定义t检验函数实现
你可以将可变参数(数据框、检验列、分组规则、分组名称)都抽离为函数入参,实现复用,具体代码如下:
基础版实现
import researchpy as rp import pandas as pd def custom_ttest(df, test_col, group_col='Q8_5', group1_value=0, group1_name='Nascent', group2_value=2, group2_name='Established'): # 提取两组待检验数据 group1_data = df[test_col][df[group_col] == group1_value] group2_data = df[test_col][df[group_col] == group2_value] # 执行t检验 summary, results = rp.ttest( group1=group1_data, group1_name=group1_name, group2=group2_data, group2_name=group2_name ) return summary, results
调用示例
- 对
dfEnt的HA列执行默认规则的t检验(对应你原有代码逻辑):summary, results = custom_ttest(df=dfEnt, test_col='HA') - 对
dfSel的IA列执行t检验:summary, results = custom_ttest(df=dfSel, test_col='IA') - 自定义分组规则调用:
summary, results = custom_ttest( df=自定义数据框, test_col='自定义检验列名', group_col='自定义分组列名', group1_value=第一组筛选值, group1_name='第一组展示名', group2_value=第二组筛选值, group2_name='第二组展示名' )
加入入参校验的增强版
如果需要提前捕获异常避免报错,可以加入基础的入参校验逻辑:
def custom_ttest(df, test_col, group_col='Q8_5', group1_value=0, group1_name='Nascent', group2_value=2, group2_name='Established'): # 校验列是否存在 if test_col not in df.columns: raise ValueError(f"待检验列 {test_col} 不存在于输入数据框中") if group_col not in df.columns: raise ValueError(f"分组列 {group_col} 不存在于输入数据框中") # 提取数据并去除空值 group1_data = df[test_col][df[group_col] == group1_value].dropna() group2_data = df[test_col][df[group_col] == group2_value].dropna() # 校验数据有效性 if len(group1_data) == 0 or len(group2_data) == 0: raise ValueError("其中一组或两组无有效可计算数据,请检查分组条件与待检验列数据质量") # 执行检验 summary, results = rp.ttest( group1=group1_data, group1_name=group1_name, group2=group2_data, group2_name=group2_name ) return summary, results
内容的提问来源于stack exchange,提问作者fredooms
相关产品推荐
相关产品推荐

