如何根据匹配的列从另一个df创建一列?

时间:2020-01-31 14:35:29

标签: python pandas dataframe jupyter-notebook data-science

我有一个df命名为“人口”,其中有一列名为“国家”。我想合并行,以便它们反映区域=(非洲,西下摆,亚洲,欧洲,中东)。我还有一个来自kaggle的名为regionref的df,它具有世界上所有国家以及与它们关联的区域。

如何使用kaggle数据集中的region列在人口df中创建一个新列,该列在country列中具有相应的国家/地区。

所以本质上这是人口数据帧

CountryName 1960 1950 ...

US
Zambia 
India 

这是regionref数据集

Country  Region      GDP...

US       West Hem
Zambia   Africa
India    Asia 

我希望人口df看起来像

CountryName  Region    1960   1950 ...

US           West Hem
Zambia       Africa
India        Asia

编辑:我尝试了串联,但是由于某些原因,两列无法识别相同的值

population['Country Name'].isin(regionref['Country']).value_counts()

这对于所有值都返回False,因为没有共同的值。

这是输出,如您所见,有一些共同的值 enter image description here

1 个答案:

答案 0 :(得分:0)

您只需要联接功能,或者说以熊猫的方式进行连接。

给出两个DataFrames弹出框,区域:


pop = pd.DataFrame([['US', 1000, 2000], ['CN', 2000, 3000]], columns=['CountryName', 1950, 1960])

CountryName 1950    1960
0   US  1000    2000
1   CN  2000    3000

region = pd.DataFrame([['US', 'AMER', '5'], ['CN', 'ASIA', '4']], columns = ['Country', 'Region', 'GDP'])

Country Region  GDP
0   US  AMER    5
1   CN  ASIA    4

您可以这样做:

pd.concat([region.set_index('Country'), pop.set_index('CountryName')], axis = 1)\
    .drop('GDP', axis =1)

    Region  1950    1960
US  AMER    1000    2000
CN  ASIA    2000    3000


轴= 1用于水平连接。您必须设置列索引才能正确连接它。