2016-03-05 7 views
0

У меня есть набор данных, как показано нижесоздают векторы для Крускала-Уоллиса H-тест питона

df = pd.DataFrame({'numbers':range(9), 'group':['a', 'b', 'c']*3}) 

group numbers 
0 a 0 
1 b 1 
2 c 2 
3 a 3 
4 b 4 
5 c 5 
6 a 6 
7 b 7 
8 c 8 

я хочу, чтобы создать векторы

a = [0, 3, 6] 
b = [1, 4, 7] 
c = [2, 5, 8] 

для Крускала-Уоллиса H-тест питона

stats.kruskal(a, b, c) 

или, может быть, аналоговый, как в R (цифры ~ группа)

ответ

2

Я не знаком с какими-либо особыми требованиями теста Крускала-Уоллиса, но вы можете получить доступ к этим сгруппированных массивы через поместив их в словарь так:

groupednumbers = {} 
for grp in df['group'].unique(): 
    groupednumbers[grp] = df['numbers'][df['group']==grp].values 

print(groupednumbers) 
*** {'c': array([2, 5, 8]), 'b': array([1, 4, 7]), 'a': array([0, 3, 6])} 

То есть, вы бы получить ваши векторы либо явный вызов groupednumbers['a'] и т.д., или с помощью списка:

args = groupednumbers.values() 

... или если вы нуждаетесь в них в порядке:

args = [groupednumbers[grp] for grp in sorted(df['group'].unique())] 

, а затем вызвать

stats.kruskal(*args) 

Или, если вам нужны реальные списки, вы можете сделать list(df['numbers'][...].values.)

+0

спасибо много @chryss – Edward

 Смежные вопросы

  • Нет связанных вопросов^_^