т тест для нескольких столбцов после групповых панд - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу вычислить и протестировать среднее значение двух разных групп из нескольких столбцов в пандах, я могу обработать вычисляемую часть, но пока нет хорошего решения для тестовой части. Ниже приведен образец игрушки и результат, который я хочу получить.

df = pd.DataFrame(np.random.randint(0,100,size=(100, 2)), columns=['col_1','col_2'])
df['group'] = ['A']*50 + ['B']*50

df.groupby('group').agg({"col_1":"mean","col_2":"mean"})

       col_1  col_2
group              
A      52.26  56.58
B      53.04  49.18

Что я хочу получить:

       col_1  t_col_1  col_2 t_col_2
group              
A      52.26  4.3***   56.58 0.8
B      53.04  4.3***   49.18 0.8

В котором t_col_1 является t статистикой разницы средних значений col_1 в группе A и группе B, то есть t.test(df.loc[df['group'].isin(['B'])][col_1], df.loc[df['group'].isin(['A'])][col_1]). Звезды не нужны, но было бы замечательно, если бы они могли быть там.

Любые предложения о том, как это сделать?

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете перебирать столбцы и выполнять t тестов по группам:

import pandas as pd
import scipy.stats as stats

tstats = {}
ix_a = df['group'] == 'A'
for x in df:
    if x != 'group':
        tstats['t_' + x] = stats.ttest_ind(df[x][ix_a], df[x][~ix_a])[0]

df.groupby('group').mean().assign(**tstats)

Результат:

       col_1  col_2  t_col_1   t_col_2
group                                 
A      56.24  46.84  0.85443 -0.281279
B      51.24  48.42  0.85443 -0.281279
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...