f_oneway 当数据为列表形式时

f_oneway when data in the form of list

如果这是源代码..您将如何编辑 f_oneway 函数行,这样您就不必每次都手动指定弓箭手名称

import numpy as np
from scipy import stats

data = np.rec.array([
('Pat', 5),
('Pat', 4),
('Pat', 4),
('Pat', 3),
('Pat', 9),
('Pat', 4),
('Jack', 4),
('Jack', 8),
('Jack', 7),
('Jack', 5),
('Jack', 1),
('Jack', 5),
('Alex', 9),
('Alex', 8),
('Alex', 8),
('Alex', 10),
('Alex', 5),
('Alex', 10)], dtype = [('Archer','|U5'),('Score', '<i8')])

f, p = stats.f_oneway(data[data['Archer'] == 'Pat'].Score,
                      data[data['Archer'] == 'Jack'].Score,
                      data[data['Archer'] == 'Alex'].Score)

print ('P value:', p, '\n')

我尝试了以下但错误显示 'no field of name Pat'

f, p = stats.f_oneway(data[data['Archer']].Score)

求助!

我想就是这样了。显然 f_oneway 无法处理 array([5, 4, 4, 3, 9, 4], dtype=int64) 类型的东西;它可以处理列表。

import numpy as np
from scipy import stats

data = np.rec.array([ ('Pat', 5), ('Pat', 4), ('Pat', 4),('Pat', 3), ('Pat', 9), ('Pat', 4),('Jack', 4), ('Jack', 8), ('Jack', 7),('Jack', 5), ('Jack', 1), ('Jack', 5), ('Alex', 9),('Alex', 8), ('Alex', 8), ('Alex', 10), ('Alex', 5), ('Alex', 10)], dtype = [('Archer','|U5'), ('Score', '<i8')])
f, p = stats.f_oneway(*[list(data[data['Archer']==name].Score) for name in ['Pat', 'Jack', 'Alex']])
f, p = stats.f_oneway(*[list(data[data['Archer']==name].Score) for name in set(data['Archer'])])
print ('P value:', p, '\n')

输出:

P value: 0.0216837493201 

编辑 回应评论:f_oneway 的第二次调用给出与第一次相同的结果,不需要列出弓箭手的名字。