Pandas创建新列时如何逐行应用自定义Monte Carlo概率函数
问题原因
你直接向MC_prob传入整列的df.Predict、df.StDev序列时,函数会将整列作为整体计算仅返回1个标量值,因此赋值后所有行的ProbOver3都是相同值。
另外你当前的MC_prob存在冗余逻辑:循环M次计算的都是完全相同的norm.sf(3, mu, sigma)结果,最终均值和单次计算结果完全一致,循环没有实际作用。如果后续需要增加随机抽样逻辑可以保留循环,否则可以直接删去循环简化代码。
实现逐行计算的方案
方案1:用apply逐行调用函数
如果需要保留现有MC_prob函数的结构,可通过apply指定axis=1逐行传参调用:
df['ProbOver3'] = df.apply(lambda row: MC_prob(M=10000, mu=row['Predict'], sigma=row['StDev']), axis=1)
方案2:向量化计算(效率更高)
scipy.stats.norm.sf本身支持数组类型的入参,不需要逐行调用也不需要循环,一行代码即可得到所有行的结果,运行效率远高于逐行apply:
df['ProbOver3'] = norm.sf(3, df['Predict'], df['StDev'])
内容的提问来源于stack exchange,提问作者SOK
相关产品推荐
相关产品推荐

