【问题标题】:Calling a function on every column of a pandas DataFrame在 pandas DataFrame 的每一列上调用一个函数
【发布时间】:2015-04-12 05:10:57
【问题描述】:

我想比较两个样本的均值差异,通过以下 pandas DataFrame 中的变量 sample 区分:

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)

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

【问题讨论】:

    标签: python-2.7 python-3.x for-loop numpy pandas


    【解决方案1】:

    在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2019-12-29
      相关资源
      最近更新 更多