2012-11-15 14 views
37

Wenn ich den Mittelwert von zwei Kategorien in Pandas berechnen wollen, kann ich es wie folgt tun: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 

ich eine Menge Daten auf diese Weise formatiert, und jetzt muss ich Machen Sie einen T-Test, um festzustellen, ob der Mittelwert von cat1 und cat2 statistisch unterschiedlich sind. Wie kann ich das machen?

Antwort

53

hängt es was für t-Test, den Sie (einseitig oder zweiseitig abhängig oder unabhängig), aber es sollte so einfach sein wollen als:

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) 

es ein Tupel mit der t-Statistik liefert & der p-Wert

hier sehen für andere t-Tests http://docs.scipy.org/doc/scipy/reference/stats.html

3

EDIT: ich diese über das Datenformat nicht erkannt hatte. Sie could use

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

Dann accessing the categories ist so einfach wie

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

Die loc operator greift Reihen von Label.


Als @G Garcia said

einseitig oder zweiseitig abhängige oder unabhängige

Wenn Sie zwei unabhängige Proben haben aber Sie wissen nicht, dass sie gleiche Varianz haben, Sie können Welch's t-test verwenden. Es ist so einfach wie

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

Aus Gründen Welch-Test finden Sie https://stats.stackexchange.com/questions/305/when-conducting-a-t-test-why-would-one-prefer-to-assume-or-test-for-equal-vari zu bevorzugen.

Für zwei abhängige Stichproben, können Sie

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