Python 基于其他dataframe的列填充dataframe列

Python 基于其他dataframe的列填充dataframe列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,其中包含一个区域的人口,我想用相同的分布填充其他数据框的一列 第一个数据帧如下所示: 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 56

我有一个数据框,其中包含一个区域的人口,我想用相同的分布填充其他数据框的一列

第一个数据帧如下所示:

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
Municipio
0 Porto
1 Porto
2 Lisboa
3 Évora
4 Lisboa
5 Aveiro
...
4996 Viseu
4997 Lisboa
4998 Porto
4999 Guarda
5000 Beja
基本上,第二个数据帧有5000行,我想创建一个列,其名称对应于第一个df中的市政信息

我的问题是,我不知道如何从第一个数据帧填充具有相同发生率分布的列

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
最终结果如下:

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
Municipio
0 Porto
1 Porto
2 Lisboa
3 Évora
4 Lisboa
5 Aveiro
...
4996 Viseu
4997 Lisboa
4998 Porto
4999 Guarda
5000 Beja

有人能帮我吗?

如果有,你可以做一张简单的地图

map = dict(zip(DF1['Population5000'], DF1['Municipio']))
DF2['Municipo'] = DF2['Population5000'].map(map)
或者只需将映射(DF2)中的填充5000列名更改为包含填充值的列所调用的任何列

map = dict(zip(municipios['Population5000'], municipios['Municipio']))
df['Municipio'] = municipios['Population5000'].map(map)
正如Amen_90和第二个数据帧中的列市政信息所建议的那样,我尝试了这一方法。当我想要与第一个数据帧中的列“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

我将使用一个简单的理解来构建一个大小为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

没有,没有公共专栏。基本上我想创建一个列,该列的名称多次等于“Population5000”列的数目,以填充我的第二个数据帧。对吗?那么在您的第二个df中,您有“population5000”的值吗?如果是这样的话,如果我理解正确,上面对我答案的编辑可能会起作用!我的第一个数据帧有一个列,列中有市政府的名称、该市的人口以及标准化为5000的人口。我的第二个数据帧有一个列名称Municipio,我想用第一个数据帧的市政名称填充它。因为第二个数据帧有5000行,所以我希望列Municipio与第一个数据帧的Municipio数量相同(来自列Population5000的数字),如果您有标准化的值,只需为它创建一个新字典;mapping={10:Lisboa,20:Porto}仅针对每个标准化值,将其应用于您想要的名称并在答案中运行映射代码,它应该可以工作。当然,如果population5000值在两列中,您可以使用上面的代码运行映射。感谢您的帮助,它工作正常。我使用for循环来打印每个名称并保存在数据框中,然后对它们进行排序randomly@JoaoNuno:如果问题解决了,别忘了接受一个答案,告诉未来的读者你不再需要这个问题的帮助