如何在python中使用groupby运行t测试

如何在python中使用groupby运行t测试,python,python-3.x,pandas,statistics,Python,Python 3.x,Pandas,Statistics,我有一个熊猫数据框,看起来像这样: import pandas as pd import numpy as np test_df = pd.DataFrame({'group': np.append(['A'] * 50, [['B'] * 50, ['C'] * 50]), 'value': np.random.randn(3 * 50)}) 我想在所有组a,B,C之间运行t-test 有没有一种类似蟒蛇的方法?我需要一些比手动切片df更通用的东西

我有一个熊猫数据框,看起来像这样:

import pandas as pd
import numpy as np
test_df = pd.DataFrame({'group': np.append(['A'] * 50, [['B'] * 50, ['C'] * 50]),
                      'value': np.random.randn(3 * 50)})
我想在所有组
a
B
C
之间运行
t-test


有没有一种类似蟒蛇的方法?我需要一些比手动切片df更通用的东西

我们可以在这里使用
itertools.combines
来获得
组中唯一值的组合

from itertools import combinations
from scipy.stats import ttest_ind

grps = test_df['group'].unique()
combs = combinations(grps, 2)

ttests = {
    f'{c1}_{c2}': ttest_ind(
        test_df.loc[test_df['group'] == c1, 'value'], 
        test_df.loc[test_df['group'] == c2, 'value']
    ) for c1, c2 in combs
}
输出

{'A_B': Ttest_indResult(statistic=1.2288295532881655, pvalue=0.22207832845954317),
 'A_C': Ttest_indResult(statistic=0.18451518261887467, pvalue=0.8539906100478168),
 'B_C': Ttest_indResult(statistic=-0.8658034013302348, pvalue=0.3887126452109223)}

这回答了你的问题吗?如果您想用相同的测试对所有组进行测试,您可能需要考虑ANOVA而不是多个T。tests@quant如果你的方差分析导致对无效假设的拒绝,你可以做一个Tukey事后检验,看看差异来自哪里from@quant如果你做了多个测试而不是一个,您增加了获得误报的机会,即偶然获得低于阈值的p值。您还可以通过将阈值(例如0.05)除以所做测试的数量来规避误报概率的增加。那么你拒绝无效假设的新阈值是0.05/3=0.0167(也称为Bonferroni校正)@quant检验将超出评论的限制。我建议从这里开始