2015-02-11 69 views
0

我想比較兩個樣本之間的均值之差,由變量sample在下面的大熊貓DataFrame區分:調用在大熊貓數據幀的每一列的函數

import numpy as np 
import pandas as pd 

df = pd.DataFrame({'sample': np.random.choice([1, 2], 10, replace=True), 
        'x': np.random.uniform(size=100), 
        'y': np.random.normal(size=100), 
        'z': np.random.choice([1,5,7,3,9],100, replace=True}) 

進口

from scipy import stats 

我想使用的功能

stats.ttest_ind(s1, s2, equal_var = False) 

每一列上zdf使得s1=df['sample'==1, z]對應於從樣品1的列的子集,並且s2=df['sample'==2, z]對應於z所述子集在樣品2

對於一個變量,我可以使用:

stats.ttest_ind(df.ix[df['sample']==1, 'x'], df.ix[df['sample']==2, 'x'], equal_var= False) 

我正在尋找一種方法來一次對所有列執行此操作。我怎樣才能做到這一點?

回答

0

使用for循環上df.columns

import numpy as np 
import pandas as pd 
from scipy import stats 

df = pd.DataFrame({'sample': np.random.choice([1, 2], 100, replace=True), 
        'x': np.random.uniform(size=100), 
        'y': np.random.normal(size=100), 
        'z': np.random.choice([1,5,7,3,9],100, replace=True)}) 

def ttest(x): 
    y = stats.ttest_ind(df.ix[df['sample']==1, x], 
     df.ix[df['sample']==2, x], 
     equal_var= False) 
    return y 


for col in df.columns: 
    print col, ttest(col) 

輸出:

sample (-inf, 0.0) 
x (0.051257527331014435, 0.95922494541232151) 
y (-1.8814017903969658, 0.063320355499510511) 
z (-1.0033063682017582, 0.31819256215047681)