2012-11-15 20 views
37

Se voglio calcolare la media di due categorie in Pandas, posso fare in questo modo:T-test in Pandas

data = {'Category': ['cat2','cat1','cat2','cat1','cat2','cat1','cat2','cat1','cat1','cat1','cat2'], 
     'values': [1,2,3,1,2,3,1,2,3,5,1]} 
my_data = DataFrame(data) 
my_data.groupby('Category').mean() 

Category:  values: 
cat1  2.666667 
cat2  1.600000 

Ho un sacco di dati formattati in questo modo, e ora ho bisogno di fare un T -test per vedere se la media di cat1 e cat2 sono statisticamente differenti. Come lo posso fare?

risposta

53

Dipende che tipo di t-test che si vuole fare (unilaterale o due lati dipendenti o indipendenti) ma dovrebbe essere semplice come:

from scipy.stats import ttest_ind 

cat1 = my_data[my_data['Category']=='cat1'] 
cat2 = my_data[my_data['Category']=='cat2'] 

ttest_ind(cat1['values'], cat2['values']) 
>>> (1.4927289925706944, 0.16970867501294376) 

che restituisce una tupla con la statistica t & il p-value

vedi qui per le altre t-test http://docs.scipy.org/doc/scipy/reference/stats.html

3

EDIT: non avevo capito che questo era circa il formato dei dati. È could use

two_data = pd.DataFrame(data, index=data['Category']) 

Poi accessing the categories è semplice come

scipy.stats.ttest_ind(two_data.loc['cat'], two_data.loc['cat2'], equal_var=False) 

Il loc operator accessi righe per etichetta.


Come @G Garcia said

unilaterale o due lati dipendenti o indipendenti

Se hai due campioni indipendenti ma non sanno di avere varianza uguale, puoi usare Welch's t-test. E 'semplice come

scipy.stats.ttest_ind(cat1['values'], cat2['values'], equal_var=False) 

Per motivi per preferire il test di Welch, vedere https://stats.stackexchange.com/questions/305/when-conducting-a-t-test-why-would-one-prefer-to-assume-or-test-for-equal-vari.

Per due campioni dipendenti, è possibile utilizzare

scipy.stats.ttest_rel(cat1['values'], cat2['values'])