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

如何将多个pandas DataFrame的t检验结果输出为DataFrame

多组DataFrame指定列t检验结果结构化实现

核心思路:保留原有双层遍历、t检验计算逻辑,不再直接逐行打印结果,而是将每次两两比较的四个字段值暂存到列表容器中,全部遍历完成后一次性转换为标准pandas DataFrame。

完整实现代码(兼容原有代码逻辑)

import pandas as pd
from scipy.stats import ttest_ind

# 原有获取变量名的函数可直接保留,以下为稳定实现参考
def retrieve_name(var):
    import inspect
    frame = inspect.currentframe().f_back
    return [var_name for var_name, var_val in frame.f_locals.items() if var_val is var][0]

# 原有两个待比较的DataFrame列表无需修改
list1 = [a_apple, b_apple, c_apple, d_apple]
list2 = [a_orange, b_orange, c_orange, d_orange]

# 初始化空列表存储每一次检验的结果记录
result_records = []

# 原有双层循环逻辑
for df1 in list1:
    g1_name = retrieve_name(df1)
    for df2 in list2:
        g2_name = retrieve_name(df2)
        # 对count列执行独立样本t检验,若两组方差不齐可添加equal_var=False参数
        t_stat, p_val = ttest_ind(df1['count'], df2['count'])
        # 将当前组结果追加到记录列表
        result_records.append({
            "group1": g1_name,
            "group2": g2_name,
            "statistics": t_stat,
            "pvalue": p_val
        })

# 转换为结构化DataFrame
t_result_df = pd.DataFrame(result_records)

注意事项

  • 若count列存在空值,调用ttest_ind时添加nan_policy='omit'参数即可自动跳过空值,避免返回无效结果
  • 若实验设计为配对样本,直接将ttest_ind替换为ttest_rel即可,其余逻辑无需改动
  • 独立样本t检验默认假设两组方差齐性,若方差不齐可添加equal_var=False使用Welch's t检验

更稳定的写法(推荐)

依赖retrieve_name查找变量名的方式在代码运行环境变化时容易报错,推荐直接在列表中绑定组名和对应DataFrame,不需要额外写变量名查找函数:

import pandas as pd
from scipy.stats import ttest_ind

# 直接绑定组名和DataFrame
list1 = [
    ("a_apple", a_apple),
    ("b_apple", b_apple),
    ("c_apple", c_apple),
    ("d_apple", d_apple)
]
list2 = [
    ("a_orange", a_orange),
    ("b_orange", b_orange),
    ("c_orange", c_orange),
    ("d_orange", d_orange)
]

result_records = []
for g1_name, df1 in list1:
    for g2_name, df2 in list2:
        t_stat, p_val = ttest_ind(df1['count'], df2['count'])
        result_records.append({
            "group1": g1_name,
            "group2": g2_name,
            "statistics": t_stat,
            "pvalue": p_val
        })

t_result_df = pd.DataFrame(result_records)

最终生成的t_result_df完全符合要求的四字段结构,示例预览:

group1group2statisticspvalue
a_applea_orange1.3720.173
a_appleb_orange-0.8420.402
b_applea_orange2.1050.038
............

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:45:33