Python 创建一个迭代数据帧行的函数,应用scipy函数,将输出追加到新列,并输出修改后的数据帧
如果这个问题似乎重复,请原谅,但我找不到符合我确切要求的答案: 我有一个z分数的数据框架,名为“df”,其结构如下: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
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.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
只能接受一个答案,不能同时接受两个答案。只能接受一个答案,不能同时接受两个答案。