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

如何在Python中对DataFrame数值列执行Kruskal和Dunn检验并导出结果

问题需求

现有名为df的DataFrame,包含Type列(取值为X、Y、Z)及column_1至column_84共84个数值列,需完成以下操作:

  • 对每个数值列执行两类统计检验:
    • Kruskal-Wallis检验:比较X、Y、Z三组的整体统计差异
    • Dunn检验:完成X vs Y、Y vs Z、X vs Z的两两比较
  • 将两类检验结果分别导出至Excel的Kruskal工作表和Dunn工作表

完整解决方案

1. 安装依赖库

先安装所需的Python库:

pip install pandas numpy scipy scikit-posthocs openpyxl

2. 实现代码

import pandas as pd
import numpy as np
from scipy.stats import kruskal
import scikit_posthocs as sp

# 注:若无需测试,可注释掉下方生成df的代码(假设df已存在)
# ----------------------
# 生成测试用DataFrame
# df = pd.DataFrame(
#     data=np.random.uniform(low=5.5, high=30.75, size=(60, 84)),
#     columns=[f'column_{i}' for i in range(1, 85)],
# )
# df.insert(loc=0, column='Type', value=np.repeat(['X','Y','Z'], 20, axis=0))
# ----------------------

# 初始化结果列表
kruskal_res = []
dunn_res = []

# 遍历所有数值列(跳过Type列)
for col in df.columns[1:]:
    # 提取各组数据
    group_x = df[df['Type'] == 'X'][col].values
    group_y = df[df['Type'] == 'Y'][col].values
    group_z = df[df['Type'] == 'Z'][col].values
    
    # Kruskal-Wallis检验
    h_stat, p_val = kruskal(group_x, group_y, group_z)
    kruskal_res.append({
        '列名': col,
        'H统计量': round(h_stat, 4),
        'P值': round(p_val, 6)
    })
    
    # Dunn检验(Bonferroni校正)
    dunn_p = sp.posthoc_dunn([group_x, group_y, group_z], p_adjust='bonferroni')
    # 提取两两比较的P值
    dunn_res.append({
        '列名': col,
        'X vs Y': round(dunn_p.iloc[0,1], 6),
        'Y vs Z': round(dunn_p.iloc[1,2], 6),
        'X vs Z': round(dunn_p.iloc[0,2], 6)
    })

# 转换为DataFrame
kruskal_df = pd.DataFrame(kruskal_res)
dunn_df = pd.DataFrame(dunn_res)

# 导出到Excel
with pd.ExcelWriter('统计检验结果.xlsx', engine='openpyxl') as writer:
    kruskal_df.to_excel(writer, sheet_name='Kruskal', index=False)
    dunn_df.to_excel(writer, sheet_name='Dunn', index=False)

print("检验结果已成功导出至「统计检验结果.xlsx」")

代码说明

  • 自动遍历所有84个数值列,批量完成两类检验
  • Kruskal结果保留4位小数的H统计量和6位小数的P值,便于结果读取
  • Dunn检验采用Bonferroni校正控制多重比较误差,直接提取三组两两对比的P值
  • 导出的Excel文件包含两个工作表,分别对应两类检验结果,无冗余索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:07:04