pandas:如何对 groupby 对象应用 scipy.stats 测试?

jrj*_*rjc 4 python scipy pandas

我有一个这样的数据框:

   1       2
0  P  214233
1  P  130435
2  P  258824
3  P   75488
4  C  101215
5  C  105793
6  C  101591
Run Code Online (Sandbox Code Playgroud)

例如,我想执行 Wilcoxon 秩和检验。为什么下面的命令不起作用?

import scipy.stats as ss
df.groupby(1).apply(ss.ranksums)
Run Code Online (Sandbox Code Playgroud)

我认为它不起作用,因为 scipy 无法识别该组:

TypeError: ranksums() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标?无需手动执行 groupby :

ss.ranksums(df[df[1]=="C"][2], df[df[1]=="P"][2])
Run Code Online (Sandbox Code Playgroud)

不知何故与方差分析相同的问题:

如果数据框是这样的:

   1       2
0  P  214233
1  P  130435
2  A  258824
3  A  75488
4  A  101215
5  C  105793
6  C  101591
Run Code Online (Sandbox Code Playgroud)

但这里的错误是:

TypeError: can't multiply sequence by non-int of type 'str'
Run Code Online (Sandbox Code Playgroud)

谢谢

inn*_*ead 5

这有效。

values_per_group = [col for col_name, col in df.groupby(1)[2]]
ss.ranksums(*values_per_group)
Run Code Online (Sandbox Code Playgroud)