gpt4 book ai didi

python - 对 Pandas 数据框进行 Mann–Whitney U 检验

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:09 25 4
gpt4 key购买 nike

我有一个类似于这个的大型数据框:

In [1]: grades
Out[1]:
course1 course2
school class student
school1 class1 student1 2 2
student2 3 2
student3 1 3
student4 3 1
student5 3 1
... ... ...
class3 student86 3 1
student87 2 2
student88 1 1
student89 3 3
student90 0 1

[90 rows x 2 columns]

我想计算样本学校和每个子样本类(class)成绩的 Mann-Whitney 秩检验。我怎样才能使用 Pandas 和 scipy.stats.mannwhitneyu 做到这一点不遍历数据框?

最佳答案

您想要做的是在索引级别上使用 groupby 并应用调用 mannwhitneyu 的函数,传递两列 course1类(class)2。假设这是您的数据:

index = pandas.MultiIndex.from_product([
['school{0}'.format(n) for n in xrange(3)],
['class{0}'.format(n) for n in xrange(3)],
['student{0}'.format(n) for n in xrange(10)]
])
d = pandas.DataFrame({'course1': np.random.randint(0, 10, 90), 'course2': np.random.randint(0, 10, 90)},
index=index)

然后按学校计算Mann-Whitney U:

>>> d.groupby(level=0).apply(lambda t: stats.mannwhitneyu(t.course1, t.course2))
school0 (426.5, 0.365937834646)
school1 (445.0, 0.473277409673)
school2 (421.0, 0.335714211748)
dtype: object

并按类(class)完成:

>>> d.groupby(level=[0, 1]).apply(lambda t: stats.mannwhitneyu(t.course1, t.course2))
school0 class0 (38.5, 0.200247279189)
class1 (37.0, 0.169040187814)
class2 (46.5, 0.409559639829)
school1 class0 (33.5, 0.110329749527)
class1 (47.5, 0.439276896563)
class2 (30.0, 0.0684355963119)
school2 class0 (47.5, 0.439438219083)
class1 (43.0, 0.308851989782)
class2 (34.0, 0.118791221444)
dtype: object

groupbylevels 参数中的数字指的是您的 MultiIndex 的级别。因此,按学校按 0 级分组,按学校/类(class)组合按 0 级和 1 级分组。

关于python - 对 Pandas 数据框进行 Mann–Whitney U 检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816637/

25 4 0