我有一个pandas数据帧(100x10),其中每列代表一些数量,我想使用t-test对所有列进行成对测试。而不是循环遍历列:
stats.ttest_rel(df.iloc[:,i], df.iloc[:,j])
其中i!=j
,有更清洁的方法吗?与相关性类似的东西:
df.corr()
它计算所有成对相关性。
答案 0 :(得分: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检验计算
答案 1 :(得分:2)
不需要自己进行双重循环。您可以使用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)