1

我有一个 pandas 数据框(100x10),其中每列代表一些数量,我想使用 t 检验对所有列进行成对测试。而不是遍历列:

stats.ttest_rel(df.iloc[:,i], df.iloc[:,j])

在哪里i!=j,有更清洁的方法吗?类似于相关性的东西:

df.corr()

它计算所有成对相关性。

4

2 回答 2

3

无需自己进行双 for 循环。您可以使用itertools.combinations

results = pd.DataFrame(columns=df.columns, index=df.columns)
for (label1, column1), (label2, column2) in itertools.combinations(df.items(), 2):
    results.loc[label1, label2] = results.loc[label2, label1] = stats.ttest_rel(column1, column2)
于 2017-07-27T12:10:27.150 回答
2

我认为没有直接的方法来创建成对的 t 检验,你可以试试这个

from scipy.stats import ttest_ind
import pandas as pd
import csv
df=pd.read_csv('input.csv')


fo = open('result.csv','wb+')
outfile = csv.writer(fo, delimiter=',')
outfile.writerow((df.columns).insert(0,''))

for i in df.columns:
    t=[]
    for j in df.columns:

        t.append(ttest_ind(df[i], df[j]))
    (t).insert(0,i)
    outfile.writerow(t)

此脚本将为您提供作为 result.csv 的输出文件,告诉您成对的 t 检验计算

于 2017-07-27T10:52:22.857 回答