我有一个包含区域人口的数据框,并且我想填充具有相同分布的其他数据框的列。
第一个数据帧如下:
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行,我想创建一个列,其名称与第一个df的Municipios相对应。
我的问题是我不知道如何从第一个数据框中填充具有相同发生率分布的列。
最终结果将是这样的:
Municipio
0 Porto
1 Porto
2 Lisboa
3 Évora
4 Lisboa
5 Aveiro
...
4996 Viseu
4997 Lisboa
4998 Porto
4999 Guarda
5000 Beja
有人可以帮我吗?
答案 0 :(得分:1)
我将使用一个简单的理解方法来构建一个大小为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
答案 1 :(得分:0)
您可以只做一张简单的地图;
map = dict(zip(DF1['Population5000'], DF1['Municipio']))
DF2['Municipo'] = DF2['Population5000'].map(map)
或仅将地图(DF2)中的人口5000列名称更改为包含您的人口值的列。
答案 2 :(得分:0)
map = dict(zip(municipios['Population5000'], municipios['Municipio']))
df['Municipio'] = municipios['Population5000'].map(map)
我按照Amen_90的建议尝试了此操作,并且从第二个数据框中的Municipio列开始,当我希望在第一个数据帧中具有与“ Population5000”列中相同的value_counts时,每个Municipio实例仅填充一个实例。 / p>
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