2013-12-19 9 views
7

私は7つの列を含む3つのデータフレームを持っています。Pandasデータフレームでt検定を行い、得られたp値の新しい行列を作成します

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_bのテスト列1とdf_aの列1に対するdf_cです。 データフレーム(df_a)を統計的なt検定を行うための標準として使用したいと思います。 私はstatsmodels(stat.ttest_ind(x1、x2))で統計テストを見つけましたが、テストからのp値から行列を作るのに助けが必要です。 誰でもこれを行う方法を知っていますか?

答えて

7

適切なNaN管理を除いて、t, p = scipy.stats.ttest_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 
+0

は私がdf_bに対してdf_aから例列1のためてmanualy上のt検定を実行したときとは異なるp値を取得しても、新たなフレームの建物は、完璧な作品、ありがとうございます。 ..hmmm – jonas

+0

@ jonas理由はNaNです。 NaNがすべての行を埋めるあなたの 'head'のために、結果は必然的に同じです。 – alko

+1

pd.DataFrame([p_b、p_c]、...)だけでなく、vstackを使用する理由は何ですか? –

関連する問題