Есть ли лучший способ создать класс, который генерирует случайный пол населения и назначается сообществу на основе n? - PullRequest
0 голосов
/ 21 июня 2020

Python класс, который генерирует случайный пол населения (М / Ж) и назначает его сообществу на основе n?

  1. Количество населения = 30

  2. примерная численность населения 30 (взрослые, пожилые, дети)

  3. Распределение по возрасту Взрослые 50%, дети 30%, возраст 20%

  4. Данные сообщества

       Community_num    Community_name  Community_polygon   Community_population
       301              new york        Mutipolgon([])      10
       303              JFK             Mutipolgon([])      10
       304              River side      Mutipolgon([])      10
    

Ожидается

 Community_num  Community_name  Community_polygon   Community_population Gender Age  Age_Group 

  301               new york        Mutipolgon([])      10                F      27 Adult
  301               new york        Mutipolgon([])      10                M      27 Adult
  301               new york        Mutipolgon([])      10                M      10 Kids
  301               new york        Mutipolgon([])      10                M      50 Old

Попробовать код

def GeneratePeople(time, n):
   
    people = [None] * n
   
    for i in range(0,n):
       
        people[i] = Person(Gender.Male, 30, time)
       
       
    return people

Я получаю базовый c но мне нужна помощь в этом.

Возраст

kids - below 15
adult - above 15 to 45
old  - 45 above

1 Ответ

1 голос
/ 21 июня 2020

Вот один из способов сделать это:

df["dummy"] = df.Community_population.map(lambda x: list(range(x)))
df = df.explode("dummy")
df["Gender"] = np.random.choice(["M", "F"], len(df))

df["Age_Group"] = np.random.choice(["child", "adult", "old"], len(df), p=[.3, .5, .2])
df.loc[df.Age_Group == "old", "age"] = np.random.randint(50, 90, len(df[df.Age_Group == "old"] ))

df.loc[df.Age_Group == "child", "age"] = np.random.randint(0, 18, len(df[df.Age_Group == "child"] ))
df.loc[df.Age_Group == "adult", "age"] = np.random.randint(18, 50, len(df[df.Age_Group == "adult"] ))

результат:

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...