簡體   English   中英

比較來自不同數據框的兩個系列,並將找到的匹配項替換為第三個系列值

[英]Compare two series from different dataframes, and where match found replace with third series value

我的主要數據框包含一些數據,並且具有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”)復制到“ world”數據框。

對於循環輸出示例:

  • 輸入“公共”值*是:UKR
  • 檢測值*是:232 UA
  • 名稱:alpha-2,dtype:對象

一種方法是將countries框轉換為Series.replace()可以接受的Series。 要做到這一點,設置alpha-3countries為指標; 這應該返回一個帶有一個索引和一列的數據幀,名為alpha-2 alpha-2列(這是一個熊貓系列)傳遞給world['iso_a3'].replace() ,如下所示:

world['iso_a2'] = world['iso_a3'].replace(countries.set_index('alpha-3')['alpha-2'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM