2013-12-19 20 views
7

我有3個數據幀包含7列。對熊貓數據幀進行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 

我的目標是產生用於柱不受DF_A的基質或與來自t-檢驗得到的P值一個數據幀,並測試dataframes DF_B和df_c,柱。這是df_b中的測試列1和df_a中的列1中的df_c。 我想使用dataframe(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

謝謝了新的幀的建築完美的作品,雖然我從得到不同的P值,當我從對DF_B DF_A manualy上運行t檢驗,例如第1列。 ..hmmm – jonas

+0

@jonas原因可能是NaN的;對於你的'頭部',NaN填滿所有的行,結果是當然標識。 – alko

+1

任何使用vstack的理由,而不僅僅是pd.DataFrame([p_b,p_c],...)? –