首页 > 解决方案 > 多行的 P 值正态检验

问题描述

我得到了以下简单的代码来计算数组的正态性:

import pandas as pd
df = pd.read_excel("directory\file.xlsx")
import numpy as np
x=df.iloc[:,1:].values.flatten()
import scipy.stats as stats
from scipy.stats import normaltest 
stats.normaltest(x,axis=None)

这很好地给了我一个 p 值和一个统计数据。我现在唯一想要的是:

使用此p值和统计信息在文件中添加 2 列,如果我有多行,请为所有行执行此操作(计算每行的 p 值和统计信息,并在其中添加 2 列与这些值)。

有人可以帮忙吗?

标签: python-3.xpandasstatistics

解决方案


如果要按行计算normaltest,则不应将flatten数据放入x并使用axis=1,例如

df = pd.DataFrame(np.random.random(105).reshape(5,21)) # to generate data
# calculate normaltest row-wise without the first column like you
df['stat'] ,df['p'] = stats.normaltest(df.iloc[:,1:],axis=1)

然后df包含两列“stat”和“p”,其中包含您正在寻找 IIUC 的值。

注意:要能够执行normaltest,您至少需要 8 个值(根据我的经验),因此您至少需要 8 列,df.iloc[:,1:]否则会引发错误。甚至,每行有 20 多个值会更好。


推荐阅读