You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对pandas dataframe执行蒙特卡洛模拟计算预测值≤0的概率并新增列

实现方案

你可以用numpy的向量化操作实现高性能的蒙特卡洛模拟,完全满足可扩展需求,即使数据量很大也能快速跑完:

步骤1:导入依赖库

import pandas as pd
import numpy as np

步骤2:执行模拟计算

# 构造示例DataFrame
d = {'Name': ['Jim', 'Jim','Jim','Jim','Jim','Jim','Jim','Jim','Jim','Jim','Jim','Jim','Jim', 'Jim','Jim','Jim','Jim','Jim','Jim','Jim','Jim','Jim','Jim'], 'Predict': [2.901826509,3.212149337,2.388237651,3.744206058,1.944415024,2.719441794,2.543629608,3.264809759,3.661189232,2.509445492,4.784738653,3.305165944,4.03919276,2.708492579,3.172120051,
1.774120629,4.40550619,2.426048696,3.767313548,4.108914912,3.198379034,4.078331863,3.652025]}
df = pd.DataFrame(data=d)
df['Mean'] = 4
df['StDev'] = 6

# 定义模拟次数
n_sim = 10000
# 固定随机种子可复现结果,不需要可以删除
np.random.seed(123)

# 一次性生成所有样本,形状为(行数, 模拟次数),完全对应Excel的NORM.INV逻辑
samples = np.random.normal(
    loc=df['Predict'].values.reshape(-1, 1),
    scale=df['StDev'].values.reshape(-1, 1),
    size=(len(df), n_sim)
)

# 计算每行样本<=0的比例,作为新列追加到原表
df['prob_le_0'] = (samples <= 0).mean(axis=1)

可选:精确概率计算(无需模拟)

如果不需要模拟过程,只需要最终概率结果,可以直接用正态分布累积分布函数计算精确值,速度比模拟更快、结果更准:

from scipy.stats import norm
df['exact_prob_le_0'] = norm.cdf(0, loc=df['Predict'], scale=df['StDev'])

内容的提问来源于stack exchange,提问作者SOK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:57:02