python - 用于比较多个数据列的循环 T 检验

标签 python pandas python-unittest

我有一个有 11 列数据的 Pandas 。我想通过测试将每一列与其他每一列进行比较(见下文)。如何创建一个循环来自动比较所有列,而无需为每个列对组合手动编写代码?

from scipy.stats import ttest_ind
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = ttest_ind(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
    print('Probably the same distribution')
else:
    print('Probably different distributions')

是否可以用矩阵或图形方式显示结果?提前致谢!

最佳答案

让我们使用嵌套字典理解来计算每个可能的列组合的t-test,然后从嵌套字典初始化一个新的数据帧以创建格式良好的矩阵表示:

dct = {x: {y: 's={:.2f}, p={:.2f}'.format(
          *ttest_ind(df[x], df[y])) for y in df} for x in df}
mat = pd.DataFrame(dct)


print(mat)
                 data1           data2
data1   s=0.00, p=1.00  s=0.33, p=0.75
data2  s=-0.33, p=0.75  s=0.00, p=1.00

如果您需要仅包含 p 值 的矩阵:

dct = {x: {y: ttest_ind(df[x], df[y]).pvalue for y in df} for x in df}
mat = pd.DataFrame(dct)

print(mat)
         data1    data2
data1  1.00000  0.74847
data2  0.74847  1.00000

要计算所有 p 值 的平均值,请使用:

mat.to_numpy().mean()
0.8742349436807844

注意:df 是包含列 data1data2 ...

的数据框

关于python - 用于比较多个数据列的循环 T 检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65456028/

相关文章:

python - 找不到 testing.postgresql 命令 : initdb inside docker

python - 如何将 mock_open 与 Python UnitTest 装饰器一起使用?

python - 在 python 中使用 import re 从文件名中提取日期

python - 如何关闭图像?

python - Pandas 分组排序

python - 如何使用 sklearn 管道和 FeatureUnion 选择多个(数字和文本)列进行文本分类?

python - 如何在多对多字段中使用 Django Haystack EdgeNGrams?

python - pyodbc 版本是什么?

python - 合并 pandas 中的历史和实时股票价格数据

python - python unittest中的测试顺序