灵感
在R中,这非常简单
data("iris")
bartlett.test(Sepal.Length ~ Species,data = iris)
关于数据集的重要一点是Sepal.Length列是数字,种类是分类的。
问题
在Python中,scipy.stats.bartlett
每个种类都需要单独的数组,请参见docs。
最简单的方法是什么?
在python中获取数据集的简单方法:
from sklearn import datasets
iris = datasets.load_iris()
iris = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= ["sepal.length","sepal.width","petal.length","petal.width"] + ['species'])
我真的希望它能起作用:
iris.groupby("species")["sepal.length"].apply(ss.bartlett)
但这不是因为它需要多个样本向量。
答案 0 :(得分:4)
按照groupby模式,您可以进行一些操作,并执行以下操作:
gb = iris.groupby('species')["sepal.length"]
ss.bartlett(*[gb.get_group(x).values for x in gb.groups])
*
将列表解压缩到函数中,剩下的只是将组以正确的形式放入函数中。如评论中所述,此处不需要.values
,因此我们可以将其写为:
gb = iris.groupby('species')["sepal.length"]
ss.bartlett(*[gb.get_group(x) for x in gb.groups])
只是为了完成,如果您真的想在一行中完成它:
ss.bartlett(*[x[1] for x in iris.groupby('species')["sepal.length"]])
但我个人认为它的可读性较差。