Как выполнить t-тест между двумя группами в пандах - PullRequest
0 голосов
/ 28 сентября 2018

Мой фрейм данных выглядит следующим образом:

exp    itr    res1
e01     1      20
e01     2      21 
e01     3      22
e01     4      23

e01     5      24
e01     6      25
e01     7      26
e01     8      27

e02     .       .
e02     .       .

Я должен разделить данные на две группы на основе итр, т.е. итр 1-4 в одной группе и итр 5-8 в другой группе

Затем я должен вычислить t-критерий для этих двух групп:

Мой текущий код:

 data_top4=data.groupby('exp').head(4)
 data_bottom4=data.groupby('exp').tail(4)

  tt_df.groupby('exp').apply(lambda df: 
  stats.ttest_ind(data.groupby('exp').head(4), data.groupby('exp').tail(4) 
  [0])

Он не работает должным образом и имеет ошибки!

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете использовать пользовательскую функцию:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...