You need to enable JavaScript to run this app. 如何对DataFrame所有唯一分组执行scipy.stats单因素ANOVA检验
优惠活动
大模型
产品
解决方案
定价
更多

如何对DataFrame所有唯一分组执行scipy.stats单因素ANOVA检验

原代码的错误根源

  • scipy.stats.f_oneway 的输入要求是:将所有参与对比的样本组以独立的数组形式作为位置参数传入,最少需要2组样本才能输出有效的F统计量。原代码通过循环逐次截取单个城市的数据传入函数,既会因为“仅传入单组数据”触发参数错误,也完全偏离了“一次性对比全部137个城市温度差异”的检验目标。
  • 原代码中用all存储唯一城市名称,属于覆盖Python内置关键字的写法,极易引发后续无意义的逻辑报错。

正确实现流程

  1. 基于DataFrame的City索引完成分组,提取每个城市对应的有效温度一维序列,存入独立列表(列表内每个元素对应一个城市的所有温度观测值)
  2. 对列表做解包操作,一次性传入f_oneway完成全量检验计算
  3. 按照指定格式输出最终结果

可直接运行的实现代码

# 按City索引层级分组,提取清洗后的温度序列
temp_group_list = []
for _, group in Tempvs.groupby(level=0):
    # 剔除温度列的空值,转为一维numpy数组
    clean_series = group["CurrentThermostatTemp"].dropna().values
    # 跳过空序列,避免触发f_oneway的输入校验错误
    if len(clean_series) > 0:
        temp_group_list.append(clean_series)

# 解包所有分组数组,一次性传入函数完成全量ANOVA计算
f_statistic, p_value = f_oneway(*temp_group_list)

# 按要求格式输出结果
print(f"针对所有分组的单因素ANOVA检验得到F统计量值为{f_statistic:.4f},对应p值为{p_value:.4g}")

补充说明

  • 不需要提前执行Tempvs.sort_index(inplace=True)操作,pandas的分组逻辑不会因为索引顺序改变影响ANOVA计算结果——F统计量仅依赖组内平方和、组间平方和的数值,和分组的传入顺序无关。
  • 代码中加入的空值、空序列过滤逻辑,可以适配原始数据中部分城市存在缺失值、无有效观测的场景,减少不必要的运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 05:15:03