Вы можете использовать пользовательскую функцию:
from scipy.stats import ttest_ind
def f(x):
cat1_1 = x.head(4)
cat1_2 = x.tail(4)
t, p = ttest_ind(cat1_1['res1'], cat1_2['res1'])
return pd.Series({'t':t, 'p':p})
out = data.groupby('exp').apply(f)
print (out)
t p
exp
e01 -4.38178 0.004659
РЕДАКТИРОВАТЬ:
def f(x):
cat1_1 = x.head(4)
cat1_2 = x.tail(4)
t, p = ttest_ind(cat1_1, cat1_2)
return pd.Series({'t':t, 'p':p})
out = data.groupby('exp')['res1'].apply(f).unstack()
print (out)
t p
exp
e01 -4.38178 0.004659
Или:
def f(x, col):
cat1_1 = x.head(4)
cat1_2 = x.tail(4)
t, p = ttest_ind(cat1_1[col], cat1_2[col])
return pd.Series({'t':t, 'p':p})
out = data.groupby('exp').apply(f, 'res1')
print (out)
t p
exp
e01 -4.38178 0.004659