熊猫:在每一行都应用stats.ttest_1samp

时间:2016-11-25 14:16:24

标签: python pandas dataframe scipy

我有一个如下所示的数据框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])

由于某种原因,我一直收到一个值错误,但肯定有更好的方法来应用它而不用于循环吗?

提前谢谢。

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}'")

的第一个参数中传递数组而不是列表