Заполните столбец фрейма данных на основе столбца другого фрейма данных - PullRequest
1 голос
/ 03 августа 2020

У меня есть фрейм данных с населением региона, и я хочу заполнить столбец другого фрейма данных с таким же распределением.

Первый фрейм данных выглядит так:

Municipio   Population  Population5000
0   Lisboa  3184984 1291
1   Porto   2597191 1053
2   Braga   924351  375
3   Setúbal 880765  357
4   Aveiro  814456  330
5   Faro    569714  231
6   Leiria  560484  227
7   Coimbra 541166  219
8   Santarém    454947  184
9   Viseu   378784  154
10  Viana do Castelo    252952  103
11  Vila Real   214490  87
12  Castelo Branco  196989  80
13  Évora   174490  71
14  Guarda  167359  68
15  Beja    158702  64
16  Bragança    140385  57
17  Portalegre  120585  49
18  Total   12332794    5000

По сути, второй фрейм данных имеет 5000 строк, и я хочу создать столбец с именем, соответствующим муниципальному ios из первого df.

Моя проблема в том, что я не знаю, как заполнить столбец одинаковыми Распределение встречаемости из первого фрейма данных.

Окончательный результат будет примерно таким:

Municipio
0 Porto
1 Porto
2 Lisboa
3 Évora
4 Lisboa
5 Aveiro
...
4996 Viseu
4997 Lisboa
4998 Porto
4999 Guarda
5000 Beja

Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Я бы использовал простое понимание, чтобы построить список размером 5000 с таким количеством элементов с названием города, как значение Population5000, и при желании перемешать его, если вы хотите случайный порядок:

lst = [m for m,n in df.loc[:len(df)-2,
                           ['Municipio', 'Population5000']].to_numpy()
       for i in range(n)]
random.shuffle(lst)
result = pd.Series(1, index=lst, name='Municipio')

Инициализируется random.seed(0), дает:

Setúbal     1
Santarém    1
Lisboa      1
Setúbal     1
Aveiro      1
           ..
Santarém    1
Porto       1
Lisboa      1
Faro        1
Aveiro      1
Name: Municipio, Length: 5000, dtype: int64
0 голосов
/ 03 августа 2020
map = dict(zip(municipios['Population5000'], municipios['Municipio']))
df['Municipio'] = municipios['Population5000'].map(map)

Я пробовал это, как было предложено Amen_90 и столбцом Municipio из второго фрейма данных, он заполняется только одним экземпляром каждого Municipio, когда я хотел иметь те же значения value_counts, что и в столбце «Population5000» в моем первом фрейм данных.

df["Municipio"].value_counts()

Beja                1
Aveiro              1
Bragança            1
Vila Real           1
Porto               1
Santarém            1
Coimbra             1
Guarda              1
Leiria              1
Castelo Branco      1
Viseu               1
Total               1
Faro                1
Portalegre          1
Braga               1
Évora               1
Setúbal             1
Viana do Castelo    1
Lisboa              1
Name: Municipio, dtype: int64
0 голосов
/ 03 августа 2020

Вы можете просто сделать простую карту, если вы это сделаете;

map = dict(zip(DF1['Population5000'], DF1['Municipio']))
DF2['Municipo'] = DF2['Population5000'].map(map)

или просто измените имя столбца 5000 на карте (DF2) на то, как называется столбец, содержащий ваши значения населения.

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