Python 对数据帧进行t检验,并生成一个新的p值矩阵
我有3个数据帧,包含7列Python 对数据帧进行t检验,并生成一个新的p值矩阵,python,pandas,statistics,statsmodels,Python,Pandas,Statistics,Statsmodels,我有3个数据帧,包含7列 df_a df_b df_c df_a.head() VSPD1_perc VSPD2_perc VSPD3_perc VSPD4_perc VSPD5_perc VSPD6_perc \ 0 NaN NaN NaN NaN NaN NaN 3 0.189588 0.228052 0.268460 0.304063 0
df_a
df_b
df_c
df_a.head()
VSPD1_perc VSPD2_perc VSPD3_perc VSPD4_perc VSPD5_perc VSPD6_perc \
0 NaN NaN NaN NaN NaN NaN
3 0.189588 0.228052 0.268460 0.304063 0.009837 0
5 0.134684 0.242556 0.449054 0.168816 0.004890 0
9 0.174806 0.232150 0.381936 0.211108 0.000000 0
11 NaN NaN NaN NaN NaN NaN
VSPD7_perc
0 NaN
3 0
5 0
9 0
11 NaN
我的目标是用t检验得到的p值生成一个矩阵或一个数据帧,并根据df_a逐列测试数据帧df_b和df_c。也就是针对df_a中的第1列测试df_b和df_c中的第1列。
我想使用dataframe(df_a)作为标准,对其进行统计t检验。
我在statsmodels(stat.ttest_ind(x1,x2))中找到了统计测试,但我需要帮助从测试中的p值生成矩阵。
有人知道如何做到这一点吗?撇开适当的NaN管理不谈,你只需做
t,p=scipy.stats.ttest\u ind(df_a.dropna(axis=0),df_b.dropna(axis=0))
请参见演示:
>>> import pandas as pd
>>> import scipy.stats
>>> import numpy as np
>>> df_a = pd.read_clibpoard()
>>> df_b = df_a + np.random.randn(5, 7)
>>> df_c = df_a + np.random.randn(5, 7)
>>> _, p_b = scipy.stats.ttest_ind(df_a.dropna(axis=0), df_b.dropna(axis=0))
>>> _, p_c = scipy.stats.ttest_ind(df_a.dropna(axis=0), df_c.dropna(axis=0))
>>> pd.DataFrame([p_b, p_c], columns = df_a.columns, index = ['df_b', 'df_c'])
VSPD1_perc VSPD2_perc VSPD3_perc VSPD4_perc VSPD5_perc VSPD6_perc \
df_b 0.425286 0.987956 0.644236 0.552244 0.432640 0.624528
df_c 0.947182 0.911384 0.189283 0.828780 0.697709 0.166956
VSPD7_perc
df_b 0.546648
df_c 0.206950
谢谢,新框架的构建非常完美,尽管我在df_a和df_b的示例列1上手动运行t-test时得到了不同的p值。。。hmmm@jonas原因可能是楠的;对于您的
标题
,其中NaN填充所有行,结果当然是相同的。是否有任何理由使用vstack而不仅仅是pd.DataFrame([p_b,p_c],…)?@而YHAYDEN无确切原因,遗留问题。数据帧部分只是在稍后添加的