2017-02-18 59 views
1

Извините заранее, если этот вопрос наивен. Я новичок в Python. Я пытаюсь выполнить t-тест на двух столбцах моего фрейма. Имеет смысл только сделать t-тест после группировки столбцов другим столбцом в одном и том же фрейме.Группа по группам в Pandas Series/Dataframe

Я имею дело с чем-то вроде этого:

rand_array = np.random.randint(low=10, high=30, size=9) 
rand_array2 = np.random.randint(low=10, high=30, size=9) 
d = {'key1':[0,0,1,0,1,1,1,0,1], 'key2': rand_array, 'key3': rand_array2} 
df1 = pd.DataFrame(d) 
print df1 

Выход я получаю:

 key1 key2 key3 
0  0 20 18 
1  0 22 16 
2  1 21 26 
3  0 21 13 
4  1 11 21 
5  1 23 10 
6  1 17 29 
7  0 13 25 
8  1 24 29 

Затем я группа по ключом1

g1 = df1.groupby('key1') 
print g1.groups 
>>> {0: Int64Index([0, 1, 3, 7], dtype='int64'), 1: Int64Index([2, 4, 5, 6, 8], dtype='int64')} 

Я хочу, чтобы выполнить t-test в основном 0: Int64Index ([0, 1, 3, 7], dtype = 'int64') vs 1: Int64Index ([2, 4, 5, 6, 8], dtype = 'int64').

Возможно ли это?

Спасибо!

ответ

2

См Welch's T-Test

Я хотел бы сделать это следующим образом:

def welch_ttest(x1, x2): 
    x_1 = x1.mean() 
    x_2 = x2.mean() 
    s1 = x1.std() 
    s2 = x2.std() 
    n1 = len(x1) 
    n2 = len(x2) 
    return ((x_1 - x_2)/(np.sqrt(s1 ** 2/n1 + s2 ** 2/n2))) 

def grouped_welch_ttest(df): 
    return welch_ttest(df.key2, df.key3) 

df1.groupby('key1').apply(grouped_welch_ttest) 

key1 
0 -1.471497 
1 1.487045 
dtype: float64 
+1

Это также реализуется в [ 'scipy.stats.ttest_ind'] (https://docs.scipy.org/doc /scipy-0.14.0/reference/generated/scipy.stats.ttest_ind.html) с 'equal_var = False'. – unutbu

+0

Спасибо вам обоим. Теперь работает :) – tester777