1

在这种情况下,我正在尝试按行(名称)实现蒙特卡罗模拟,我能够获得蒙特卡罗模拟,但是当我寻求独立和按行随机。我已经用尽了所有想法,现在正在寻求帮助:)

这导致的结果显然是“行”特定的,这意味着当我希望它真正唯一且按行/名称随机时,rnd.gauss(mean, std) 是一致的。我尝试使用“名称”添加一个 for 循环,但它没有按预期工作。

import random as rnd
import pandas as pd

data = [['lj', 22.72, 37, 9.8], ['nc', 13.24, 30.9, 4.4],['bm', 13.77, 26.3, 9.3], ['jl', 12, 25.9, 7.2]]
df = pd.DataFrame(data, columns= ['Name', 'Proj', 'Ceil', 'Floor'])

mean = df['Proj'].astype(float)
std = ((df['Ceil'].astype(float) - df['Floor'].astype(float))/2).astype(float)
num_of_sims = 10
name = df['Name']

output = pd.DataFrame([])

def simulation (n):
    simulated_projection = 0
    simulated_projection = rnd.gauss(mean, std)
    return simulated_projection

for i in range(num_of_sims):
    projection = simulation(num_of_sims)
    output = output.append(projection, True)
0 1 2 3
0 19.057055 9.671322 11.480660 9.481726
1 28.160946 18.540922 17.170591 15.740650
2 27.912110 18.298490 17.015069 15.569576
3 35.364650 25.559236 21.672906 20.693197
4 8.840950 -0.281869 5.095593 2.458153
5 27.978372 18.363047 17.056483 15.615131
6 47.647661 37.526140 29.349788 29.137767
7 12.740099 3.516935 7.532562 5.138818
8 20.443244 11.021837 12.347027 10.434730
9 33.104873 23.357615 20.260545 19.139600

输出是上表,您可以看到 rnd.gauss(mean, std) 正在为每列创建所需的随机正态分布,但是每行的随机化是一致的。例如,第 3 行显示第 0 列的 35,第 1 列也是较大的值 25,第 2 列也是较大的值 21 等。第 4 行显示第 0 列的 8,第 1 列也很小 -0.28,第 2 列也很小 5等等

我正在寻找的是按行独立的随机化(定义模拟),以实现每次模拟的更随机抽样。

4

0 回答 0