Я работаю над созданием симуляции Монте-Карло, которая будет проходить через каждый идентификатор моего информационного кадра и выводить их соответствующие средние значения и стандартные отклонения.Я смог написать код, чтобы получить его для любого идентификатора, но не перебирать весь список идентификаторов в моем фрейме данных.Таким образом, я мог бы написать каждую строку отдельно, но мне нужен код для перебора любого изменяемого списка идентификаторов.
Здесь я попытался создать список списков, в котором каждый набор наблюдений Монте-Карло может бытьхранится (а среднее и стандартное можно взять из).Я не верю, что это будет самый эффективный способ кодирования этого, но это то, что я знаю на данный момент.Есть ли способ запустить симуляцию Монте-Карло на каждом из идентификаторов (без конкретного вызова каждого)?Мне нужно иметь возможность добавлять и удалять различные идентификаторы и соответствующие данные из списка.
Это продолжение: Использование Монте-Карло для прогнозирования доходов в Python
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
ID = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
Revenue = [1000, 1200, 1300, 100 ,500, 0, 800, 950, 4321, 800, 1000, 1200, 1300, 100 ,500, 0, 800, 950, 4321, 800]
odds = [0.5, 0.6, 0.33, 0.1, 0.9, 0.87, 0.37, 0.55, 0.97, 0.09, 0.5, 0.6, 0.33, 0.1, 0.9, 0.87, 0.37, 0.55, 0.97, 0.09]
d = {'ID': ID, 'Revenue': Revenue, 'Odds': odds}
df = pd.DataFrame(d)
df['Expected Value'] = df['Revenue']*df['Odds']
print(df)
num_samples = 100
df['Random Number'] = np.random.rand(len(df))
def monte_carlo_array(df):
for _ in range(len(df)):
yield []
mc_arrays = list(monte_carlo_array(df))
# Fill each list with 100 observations (no filtering necessary)
id_1 = []
filter_1 = (df['ID'] == 5)
for _ in range(num_samples):
sample = df['Revenue'] * np.where(np.random.rand(len(df)) < \
df['Odds'], 1, 0)
for l in monte_carlo_array(df):
for i in l:
mc_arrays[i].append(sample.sum())
id_1.append(sample.loc[filter_1].sum())
# Plot simulation results.
n_bins = 10
plt.hist([id_1], bins=n_bins, label=["ID: 1"])
plt.legend()
plt.title("{} simulations of revenue".format(num_samples))
print(mc_arrays)
df['Monte Carlo Mean'] = np.mean(mc_arrays[0])
print(df['Monte Carlo Mean'])