Pandas中的T-testing(Python)

如果我想计算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 

我有很多这样格式化的数据,现在我需要做一个T -test来看看cat1cat2的平均值是否有统计学差异。 我怎样才能做到这一点?

这取决于你想做什么样的t检验(单方面或双方依赖或独立),但它应该是如此简单:

 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) 

它返回一个包含t统计量和p值的元组

在这里看到其他的t检验http://docs.scipy.org/doc/scipy/reference/stats.html

编辑:我没有意识到这是关于数据格式。 你可以使用

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

然后访问类别就像

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

loc operator通过标签访问行。


正如@G加西亚所说

单方或双方独立或独立

如果你有两个独立的样本,但你不知道它们有相同的方差 ,你可以使用韦尔奇的t检验 。 它和…一样简单

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

由于喜欢韦尔奇testing的原因,请参阅https://stats.stackexchange.com/questions/305/when-conducting-at-test-why-would-one-prefer-to-assume-or-test-for-equal- vari 。

对于两个相关样本 ,您可以使用

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