Pandas 将 kruskal-wallis 应用于数字列

Posted

技术标签:

【中文标题】Pandas 将 kruskal-wallis 应用于数字列【英文标题】:Pandas apply kruskal-wallis to numeric columns 【发布时间】:2019-01-09 00:03:18 【问题描述】:

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

我试过了:

df.groupby(['treatment']).apply(kruskal)

这会引发错误“在 stats.kruskal() 中需要至少 2 个组两个组”。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

ValueError: 在 stats.kruskal() 中至少需要两个组 你有多少组?如果你这样做df.groupby("treatment").size(),输出是什么? 有5组。这些组的输出为 134、72、128、59 和 72。 编辑了我的答案,需要扩展可迭代对象(通过将* 放在前面)。现在好吗? for name, group in df.groupby("treatment") 遍历不同的组,对于每个组,group["variable"].values 选择所需列的值。最后,您会得到一个给定变量的每个组的值列表,您可以将其扩展并提供给 kruskal 函数。

以上是关于Pandas 将 kruskal-wallis 应用于数字列的主要内容,如果未能解决你的问题,请参考以下文章

R - stat_compare_means 从 Kruskal-Wallis 测试返回不同的值

Python 中 Kruskal-Wallis 测试的输入格式

带有调整 p 值的 R 的 Kruskal-Wallis 检验

在进行 Kruskal-Wallis 之后,我应该进行哪些事后测试?

R中列表子列表之间的Kruskal-Wallis测试

如何处理 Matlab 中 Kruskal-Wallis 测试中的缺失值?