基于其他dataframe的列填充dataframe列

2024-06-16 14:00:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

第一个数据帧如下所示:

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中的市政信息

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

最终结果如下:

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

有人能帮我吗


Tags: 数据区域人口populationportomunicipioaveirovora
3条回答

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

如果你做了,你可以做一个简单的地图

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

或者只需将映射(DF2)中的填充5000列名更改为包含填充值的列所调用的任何列

相关问题 更多 >