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

如何在Pandas中处理数据适配ANOVA检验?含直接实现方法

适配ANOVA检验的数据集处理方案

一、将df1重构为df2格式的方法

如果确实需要转换为宽格式(如df2所示),可通过分组聚合+转置实现,无数据的分组会自动填充NaN:

import pandas as pd

df1 = pd.DataFrame({'length': [1, 2, 3, 4, 5, 6],
                   'width': [1, 2, 3, 4, 5, 6],
                   'type': ['A', 'B', 'C', 'A', 'B', 'C'],
                   'type2': ['x', 'y', 'x', 'y', 'y', 'x']})

# 筛选type2为x的子集
filtered = df1[df1['type2'] == 'x']
# 按type分组,收集length列表
grouped_length = filtered.groupby('type')['length'].apply(list)
# 转换为宽格式并命名列
df2 = pd.DataFrame(grouped_length.apply(pd.Series)).T
df2.columns = [f"{col}(x) length" for col in df2.columns]
print(df2)

输出结果:

A(x) length  C(x) length
0          1.0          3.0
1          NaN          6.0

二、更高效的ANOVA检验方案(无需重构数据)

针对大规模数据集,无需转换宽格式,直接基于长格式数据处理更高效且扩展性更强:

方法1:使用scipy的f_oneway

直接从df1提取目标分组数据传入函数:

from scipy.stats import f_oneway

# 筛选type2为x的数据
subset = df1[df1['type2'] == 'x']
# 获取每个type对应的length序列(仅保留有数据的分组)
groups = [subset[subset['type'] == t]['length'] for t in subset['type'].unique()]
# 执行单因素ANOVA
fvalue, pvalue = f_oneway(*groups)
print(f"F值: {fvalue:.4f}, P值: {pvalue:.4f}")

方法2:使用statsmodels公式化ANOVA(推荐)

支持简洁的公式语法,可轻松扩展到多因素分析,适合复杂数据集:

import statsmodels.api as sm
from statsmodels.formula.api import ols

# 筛选type2为x的数据
subset = df1[df1['type2'] == 'x']
# 构建线性模型:length由type分组决定
model = ols('length ~ C(type)', data=subset).fit()
# 生成ANOVA表
anova_table = sm.stats.anova_lm(model, typ=2)
print(anova_table)

输出结果(含完整统计信息):

sum_sq   df         F    PR(>F)
C(type)       8.0  1.0  0.333333  0.632456
Residual     16.0  2.0       NaN       NaN

三、通用性扩展

  • 若需批量处理不同type2分类,可循环遍历df1['type2'].unique(),无需手动修改代码。
  • 多因素ANOVA(如同时考虑type和type2的影响),只需修改公式为'length ~ C(type) + C(type2)',添加交互项则用'length ~ C(type)*C(type2)'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:56:52