首页 > 解决方案 > 如何根据匹配列从另一个df创建列?

问题描述

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

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

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

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,因为没有共同的值。

这是输出,你可以看到有共同的价值观 在此处输入图像描述

标签: pythonpandasdataframejupyter-notebookdata-science

解决方案


你只需要一个连接功能,或者说,以熊猫的方式连接。

给定两个 DataFrame 弹出,区域:


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


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


推荐阅读