2016-11-25 8 views
0

ich einen Datenrahmen zdf habe, die wie folgt aussieht:Pandas: apply stats.ttest_1samp auf jeder Zeile

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 

Ich versuche, einen zweiseitigen t-Test für jede Zeile, und speichere das Ergebnis anzuwenden in einer neuen Spalte. Verwendung stats.ttest_1samp

from scipy.stats import stats 

Es nimmt einen ersten Parameter eine Liste (alle Werte in jeder Zeile mit Ausnahme reicht), und einen zweiten Parameter, der Mittelwert (letzte Spalte in ZDF). Es gibt zwei Werte zurück: Die t-Statistik und der p-Wert. Ich versuche, die folgende:

for i in range(zdf.shape[0]+1): 
    zdf.ix[i,'ttest'] = stats.ttest_1samp(list(zdf.iloc[i,:-1]),zdf.iloc[i,-1]) 

ich immer aus irgendeinem Grunde einen Wert Fehler bekommen, aber sicher gibt es einen besseren Weg, dies ohne zu beantragen Looping?

Vielen Dank im Voraus.

+1

können Sie uns den Fehler zeigen –

Antwort

1

Sie nicht ein Array-Element mit einer Sequenz mit .ix[] so müssen Sie ein einzelnes Array übergeben hat, so setzen:

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] 

auch würde ich im ersten Argumente anstelle einer Liste ein Array übergeben, mit .values

Verwandte Themen