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

Pandas按model分组执行Tukey HSD检验并导出CSV结果

Pandas分组执行Tukey HSD检验实现

核心解决点

  • 修复原循环逻辑未传入对应model子集的问题:通过groupby遍历直接获取每个model对应的子集数据传入检验函数
  • 实现多组检验结果合并:用列表暂存每个分组的结构化检验结果,最后一次性拼接导出
  • 内置字段校验逻辑,避免空值、分组数不足导致的运行报错

依赖安装

执行代码前先安装需要的第三方库:

pip install pandas statsmodels

完整可运行代码(带详细注释)

import pandas as pd
from statsmodels.stats.multicomp import pairwise_tukeyhsd

# ----------------------
# 数据读取部分,替换为你自己的数据集路径即可
# ----------------------
# 读入csv数据集,如果是excel格式换成pd.read_excel即可
df = pd.read_csv("your_car_dataset_path.csv")

# 预处理:把气缸数字段转为字符串类型,避免数值型分组识别错误
df["No_of_cylinders"] = df["No_of_cylinders"].astype(str)
# 剔除关键字段为空的无效行,避免检验报错
df = df.dropna(subset=["mpg", "No_of_cylinders", "model"])

# ----------------------
# 按model分组循环执行Tukey检验
# ----------------------
# 初始化空列表,存储每个model的检验结果
result_container = []

# 遍历所有model分组,group_name是当前model名称,group_data是对应model的子集数据
for model_name, group_data in df.groupby("model"):
    # 校验当前model下的气缸类别数,不足2组无法做多重比较直接跳过
    valid_cylinder_groups = group_data["No_of_cylinders"].nunique()
    if valid_cylinder_groups < 2:
        print(f"model {model_name} 下气缸类别不足2组,跳过检验")
        continue

    # 传入当前model的子集执行Tukey HSD检验
    tukey_output = pairwise_tukeyhsd(
        endog=group_data["mpg"],       # 待检验的连续指标:油耗mpg
        groups=group_data["No_of_cylinders"], # 分组维度:气缸数
        alpha=0.05                     # 显著性水平取常规0.05
    )

    # 把statsmodels输出的结果对象转为结构化DataFrame
    # 跳过结果表的表头行取实际数据,用内置表头做DataFrame列名
    group_result_df = pd.DataFrame(
        data=tukey_output._results_table.data[1:],
        columns=tukey_output._results_table.data[0]
    )
    # 新增列标记当前结果对应的model名称
    group_result_df["model"] = model_name
    # 将当前model的结果存入暂存列表
    result_container.append(group_result_df)

# ----------------------
# 结果合并与导出
# ----------------------
# 拼接所有model的检验结果
final_result = pd.concat(result_container, ignore_index=True)
# 调整列顺序,把model字段放到最左侧方便查看
col_order = ["model"] + [col for col in final_result.columns if col != "model"]
final_result = final_result[col_order]

# 导出为CSV文件,用utf-8-sig编码避免中文乱码,不导出行索引
final_result.to_csv("all_model_tukey_hsd_result.csv", index=False, encoding="utf-8-sig")
print(f"检验完成,共导出{len(result_container)}个model的检验结果")

输出结果字段说明

  • model:当前对比结果对应的车型型号
  • group1/group2:参与对比的两组气缸数
  • meandiff:两组mpg的均值差值
  • p-adj:经多重比较校正后的p值,p<0.05代表两组油耗差异存在统计学显著性
  • lower/upper:均值差的95%置信区间上下限
  • reject:是否拒绝“两组无差异”的原假设,值为True代表两组油耗差异显著

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:27:13