Сама функция и создание вашей группы правильные, но есть некоторые небольшие ошибки и вещи, которые можно было бы сделать лучше.
Вы можете сделать, как вы сделали, и итерировать медианную функцию по размеру группы.Но функция np.random.normal может принимать третий параметр, который является именно этим.Таким образом, функция может быть переписана
def median(mean, std_dev, size):
data = np.random.normal(mean, std_dev, size)
get_median = np.median(data)
return get_median
Циклы немного проблематичны.Вы повторяете 300 раз, что равняется вашим 300 желаемым имитациям, но затем каждый индивидуум добавляется в group_all.Не медиана каждого населения, как я думаю, вы хотели.Это исправлено в приведенной выше функции с помощью параметра size.
Тогда есть два вложенных цикла с одинаковым именем переменной.В этом случае это работает, но это плохая практика.Первая переменная цикла for не используется, поэтому ее лучше назвать _.Также два других цикла находятся вне первого цикла for и не будут повторяться.Циклы можно изменить на
groups_data = [[] for _ in range(3)]
for _ in range(300):
for i, group in enumerate(groups):
groups_data[i].append(median(group['mean'], group['std_dev'], group['size']))
Вы также можете построить несколько групп на одном графике.Просто сложите их перед вызовом plt.show ().
for group in groups_data:
sns.distplot(group)
plt.show()
Я думаю, что этот код чище и, надеюсь, ближе к тому, чего вы хотели достичь.Удачи!