比较来自不同数据框的两个系列,找到的匹配项将替换为第三系列值

时间:2019-01-05 15:54:01

标签: python pandas dataframe series

我的主要数据框包含一些数据,并且具有ISO国家/地区代码alpha-2(表示两个字母符号)中的世界国家/地区。最终,数据框将与另一个包含世界国家/地区的ISO国家/地区代码alpha-3(表示三个字母符号)合并。有一些python包可以进行转换,但是应该可以通过简单的参考csv文件在数据框中手动进行比较和替换。

编辑:两个数据框中的国家/地区代码的顺序不同(有些缺失/没有填充),这就是为什么我需要手动迭代并挑选出每个符号的原因。

由于我是新手,无法固定正确的语法,因此我陷入了代码编写过程。继续获取: ValueError:只能比较标记相同的Series对象

我试图获取索引位置和值,但是无法将新系列附加到原始数据帧。我做了一个简单的for循环来测试和可视化我想要实现的目标,请参见代码。

# notebook magic
%matplotlib inline

# import packages
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import geopandas

# import excel data from files
# note: here the countries are in ISO 3166-1 alpha-2
joblist = pd.read_excel('joblist.xlsx', sheet_name='Joblist', header=1).reset_index(drop=True)

# load iso-countries reference file for conversion
countries = pd.read_csv('iso-countries.csv')

# load the world map dataset and remove Antartica and empty countries
# note: here the countries are in ISO 3166-1 alpha-3
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world = world[(world.pop_est>0) & (world.name!="Antarctica")]

# just for testing, iterate and fetch correct value, THIS fetched value should be appended to main dataframe 
for value in world['iso_a3']:
    print('* INPUT VALUE *', value)
    print('* FETCHED VALUE *', countries['alpha-2'].loc[countries['alpha-3'] == value])

# append new iso alpha-2 value to world dataframe
# THIS IS THE LINE OF CODE I AM STUCK IN
world['iso_a2'] = countries['alpha-2'].where(world['iso_a3'] == countries['alpha-3'])   

在我的for循环中,这是我想要在一个国家/地区实现的示例。遍历“世界”数据框中的ISO alpha-3系列,并为每个项目搜索“国家”数据框中并找到该项目所在的行(“ UKR”)。然后,当我得到正确的行时,将alpha-2值(“ UA”)复制到“世界”数据框中。

对于循环输出示例:

  • 输入“公共”值*是:UKR
  • 获取的值*是:232 UA
  • 名称:alpha-2,dtype:对象

1 个答案:

答案 0 :(得分:0)

一种方法是将countries数据框架转换为Series.replace()可以接受的系列。为此,请将alpha-3的{​​{1}}列设置为索引;这将返回一个带有一个索引和一个名为countries的列的DataFrame。将alpha-2列(这是熊猫系列)传递给alpha-2,如下所示:

world['iso_a3'].replace()