1

我有类似这样的数据框:

codes=[1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3]
values=[702,713,701,721,705,715,703,712,706,710,702,715,698,718,704]
df = pd.DataFrame(list(zip(codes, values)),
               columns =['code', 'val'])

>>>

   code val
0   1   702
1   3   713
2   1   701
3   3   721
4   1   705
5   3   715
6   1   703
7   3   712
8   1   706
9   3   710
10  1   702
11  3   715
12  1   698
13  3   718
14  1   704

我想检查第 1 组和第 3 组的值之间是否存在显着差异。为此,我使用了 scipy 的 shapiro 测试来检查数据是否呈正态分布。

我在原始代码中做了一些我认为是错误的事情:

shapiro1=stats.shapiro(df[df['code'] == 1]
>>>
ShapiroResult(statistic=0.6468859314918518, pvalue=4.644487489713356e-05)

shapiro3=stats.shapiro(df[df['code'] == 3]
>>>
ShapiroResult(statistic=0.6508359909057617, pvalue=0.00011963312863372266)

如您所见,我通过代码而不是值来过滤数据框,因此我插入了具有一个代码值和两列的数据框。

然后我做了一些我认为可以解决的事情:

stats.shapiro(df[df['code'] == 3]['val'])
>>>
ShapiroResult(statistic=0.967737078666687, pvalue=0.8816877007484436)

所以它不是正态分布的。

当我打印插入到 shapiro 的部分时:

df[df['code'] == 3]

我有两列的数据框,它检查什么?“代码”分布?他们的一些混合?

我的问题是:
当我将两列 df 插入到 shapiro 测试时,它会检查什么?

编辑:我已经能够添加更多列并对它们运行 shapiro 测试(仅使用随机数)

4

1 回答 1

1

github 上的源代码来看,调用时发生的第一件事stats.shapiro()是将输入传递给numpy.ravel(). 这将返回一个视图(如果可能)或您的数据副本作为一个扁平的、连续的一维数组。

基本上,它将所有列放入一个大而长的桶中,然后继续计算 Shapiro-Wilk 检验。

于 2021-04-07T09:46:36.373 回答