繁体   English   中英

在pandas DataFrame的每一列上调用一个函数

[英]Calling a function on every column of a pandas DataFrame

我想比较两个样本之间的平均差异,通过以下pandas DataFrame的变量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)

df每个列z上,使得s1=df['sample'==1, z]对应于来自样本1的列的子集,并且s2=df['sample'==2, z]对应于子集样本2中的z

对于一个变量,我可以使用:

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

我正在寻找一种方法来同时为所有列执行此操作。 我怎样才能做到这一点?

在df.columns上使用For循环

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM