Python 创建一个迭代数据帧行的函数,应用scipy函数,将输出追加到新列,并输出修改后的数据帧

Python 创建一个迭代数据帧行的函数,应用scipy函数,将输出追加到新列,并输出修改后的数据帧,python,pandas,numpy,scipy,helper,Python,Pandas,Numpy,Scipy,Helper,如果这个问题似乎重复,请原谅,但我找不到符合我确切要求的答案: 我有一个z分数的数据框架,名为“df”,其结构如下: score_1 score_2 score_3 score_4 1 0.15 0.20 0.81 0.60 2 0.70 0.55 0.84 0.50 3 0.90 0.33 0.54 0.07 combine_pvalues(z-score-array, method='stouffer', weigh

如果这个问题似乎重复,请原谅,但我找不到符合我确切要求的答案:

我有一个z分数的数据框架,名为“df”,其结构如下:

    score_1 score_2 score_3 score_4
1   0.15    0.20    0.81    0.60
2   0.70    0.55    0.84    0.50
3   0.90    0.33    0.54    0.07
combine_pvalues(z-score-array, method='stouffer', weights=None)
我想创建一个新列“z_score_combined”,其中包含每行的组合z分数

在本例中,z分数将使用scipy.stats中的“combine_pvalues”函数进行组合。欲了解更多信息,请阅读:

该功能的结构如下所示:

    score_1 score_2 score_3 score_4
1   0.15    0.20    0.81    0.60
2   0.70    0.55    0.84    0.50
3   0.90    0.33    0.54    0.07
combine_pvalues(z-score-array, method='stouffer', weights=None)
在函数中,“z-score-array”是来自每行的z-score的数组。例如,“array_1”将是“df”中索引为1的行的z分数数组;i、 e.数组_1=[(0.15,0.20,0.81,0.60)],数组_2=[(0.70,0.55,0.84,0.50)]等等

我如何创建一个助手函数,该函数:

  • 遍历数据帧的行,“df”
  • 创建1D Numpy数组对象“z-score-array”
  • 将数组馈送到函数中:合并z_值(z-score-array,method='stouffer',weights=None),以计算合并的z_值
  • 在数据框“df”中的“z_score_combined”新列中追加组合的z分数
  • 输出一个修改版本的数据帧“df”,其中包含新的组合z分数列

  • 提前谢谢你

    尝试
    df.apply
    。您可以创建一个接受一行的函数,每一行都可以访问第1-4列中的属性。这省去了为zscore创建数组的需要,因为您正在迭代这些行。此函数应返回该行的“组合分数”列中应包含的值。然后创建新列,如下所示:


    df['new\u column']=df.apply(你的函数,axis=1)

    试试
    df.apply
    。您可以创建一个接受一行的函数,每一行都可以访问第1-4列中的属性。这省去了为zscore创建数组的需要,因为您正在迭代这些行。此函数应返回该行的“组合分数”列中应包含的值。然后创建新列,如下所示:

    df['new_column']=df.apply(你的_函数,axis=1)

    与lambda函数一起使用,如果想要一个列,请选择元组的第一个
    [0]
    或第二个值
    [1]

    from scipy.stats import combine_pvalues
    df['pval'] = df.apply(lambda x: combine_pvalues(x, method='stouffer', weights=None)[1], axis=1)
    print (df)
       score_1  score_2  score_3  score_4      pval
    1     0.15     0.20     0.81     0.60  0.354423
    2     0.70     0.55     0.84     0.50  0.794535
    3     0.90     0.33     0.54     0.07  0.394789
    
    如果要在两列中输出两个值,请添加参数
    result\u type='expand'

    from scipy.stats import combine_pvalues
    
    f = lambda x: combine_pvalues(x, method='stouffer', weights=None)
    df[['stat','pval']] = df.apply(f, axis=1, result_type='expand')
    print (df)
       score_1  score_2  score_3  score_4      stat      pval
    1     0.15     0.20     0.81     0.60  0.373406  0.354423
    2     0.70     0.55     0.84     0.50 -0.822260  0.794535
    3     0.90     0.33     0.54     0.07  0.266859  0.394789
    
    与lambda函数一起使用,如果需要一列,请选择元组的第一个
    [0]
    或第二个值
    [1]

    from scipy.stats import combine_pvalues
    df['pval'] = df.apply(lambda x: combine_pvalues(x, method='stouffer', weights=None)[1], axis=1)
    print (df)
       score_1  score_2  score_3  score_4      pval
    1     0.15     0.20     0.81     0.60  0.354423
    2     0.70     0.55     0.84     0.50  0.794535
    3     0.90     0.33     0.54     0.07  0.394789
    
    如果要在两列中输出两个值,请添加参数
    result\u type='expand'

    from scipy.stats import combine_pvalues
    
    f = lambda x: combine_pvalues(x, method='stouffer', weights=None)
    df[['stat','pval']] = df.apply(f, axis=1, result_type='expand')
    print (df)
       score_1  score_2  score_3  score_4      stat      pval
    1     0.15     0.20     0.81     0.60  0.373406  0.354423
    2     0.70     0.55     0.84     0.50 -0.822260  0.794535
    3     0.90     0.33     0.54     0.07  0.266859  0.394789
    

    只能接受一个答案,不能同时接受两个答案。只能接受一个答案,不能同时接受两个答案。