Python 3.x Pandas将kruskal wallis应用于数字列

Python 3.x Pandas将kruskal wallis应用于数字列,python-3.x,pandas,apply,kruskal-wallis,Python 3.x,Pandas,Apply,Kruskal Wallis,我有一个27列的数据框(26列是数值变量,第27列告诉我每行与哪个组关联)。总共有7组,我试图对每个变量应用Kruskal-Wallis检验,按组划分,以确定是否存在显著差异 我试过: df.groupby(['treatment']).apply(kruskal) 这会抛出一个错误“在stats.kruskal()中至少需要两个组和两个组” 我的其他尝试也没有产生结果。我将定期对更大的数据集进行类似的分析。有人能帮我理解这个问题以及如何解决它吗?使用Scipy,您可以对每个变量都这样做: s

我有一个27列的数据框(26列是数值变量,第27列告诉我每行与哪个组关联)。总共有7组,我试图对每个变量应用Kruskal-Wallis检验,按组划分,以确定是否存在显著差异

我试过:

df.groupby(['treatment']).apply(kruskal)
这会抛出一个错误“在stats.kruskal()中至少需要两个组和两个组”


我的其他尝试也没有产生结果。我将定期对更大的数据集进行类似的分析。有人能帮我理解这个问题以及如何解决它吗?

使用Scipy,您可以对每个变量都这样做:

scipy.stats.kruskal(*[group["variable"].values for name, group in df.groupby("treatment")])

使用Scipy,您可以对每个变量执行以下操作:

scipy.stats.kruskal(*[group["variable"].values for name, group in df.groupby("treatment")])

ValueError:在stats.kruskal()中至少需要两个组您有多少个组?如果执行df.groupby(“治疗”).size(),输出是什么?共有5个组。这些组的输出分别为134、72、128、59和72。编辑我的答案后,需要扩展iterable(将
*
放在前面)。现在可以吗?
对于名称,在df中分组。groupby(“治疗”)
迭代不同的组,对于每个组,
group[“variable”]。值
选择所需列的值。最后,您会得到一个给定变量的每个组的值列表,您可以将这些值展开并提供给kruskal函数。ValueError:在stats.kruskal()中至少需要两个组您有多少个组?如果执行df.groupby(“治疗”).size(),输出是什么?共有5个组。这些组的输出分别为134、72、128、59和72。编辑我的答案后,需要扩展iterable(将
*
放在前面)。现在可以吗?
对于名称,在df中分组。groupby(“治疗”)
迭代不同的组,对于每个组,
group[“variable”]。值
选择所需列的值。最后,您会得到一个给定变量的每个组的值列表,您可以将其展开并提供给kruskal函数。