在这种情况下,我正在尝试按行(名称)实现蒙特卡罗模拟,我能够获得蒙特卡罗模拟,但是当我寻求独立和按行随机。我已经用尽了所有想法,现在正在寻求帮助:)
这导致的结果显然是“行”特定的,这意味着当我希望它真正唯一且按行/名称随机时,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等等
我正在寻找的是按行独立的随机化(定义模拟),以实现每次模拟的更随机抽样。