我有一个如下所示的数据框zdf:
Index A B C Mean
2008-11-21 23 12 16 18
2008-11-24 26 14 15 17
2008-11-25 28 20 21 25
2008-11-26 25 26 27 26
我正在尝试对每一行应用双面t检验,并将结果存储在新列中。使用stats.ttest_1samp
from scipy.stats import stats
第一个参数是一个列表(除了最后一行之外的每一行上的所有值),第二个参数是平均值(zdf中的最后一列)。它将返回两个值:t统计量和p值。我正在尝试以下方法:
for i in range(zdf.shape[0]+1):
zdf.ix[i,'ttest'] = stats.ttest_1samp(list(zdf.iloc[i,:-1]),zdf.iloc[i,-1])
由于某种原因,我一直收到一个值错误,但肯定有更好的方法来应用它而不用于循环吗?
提前谢谢。
答案 0 :(得分:1)
您无法使用for i in range(zdf.shape[0]+1):
zdf.ix[i,'ttest_res1'] = stats.ttest_1samp(zdf.iloc[i,:-1].values,zdf.iloc[i,-1])[1]
zdf.ix[i,'ttest_res2'] = stats.ttest_1samp(zdf.iloc[i,:-1].values,zdf.iloc[i,-1])[2]
的序列设置数组元素,因此需要传递单个数组,如:
.values
另外,我会在User.where.not("#{@key} LIKE ?, '#{@pattern}'")
User.where("#{@key} LIKE ?, '#{@pattern}'")