通过从其他列中查找值,用字典中的键填充DataFrame列中的NaN

时间:2018-11-23 05:25:51

标签: python pandas dictionary

我有一个类似的数据集:

> Country                     Code
> 'Bolivia'                   NaN
> 'Bolivia, The Republic of'  NaN

我也有字典

> CountryCode = {'BOL':['Bolivia','Bolivia, The Republic of']}

如果值之一在字典中,如何使用相应的键继续在数据框中填充fillna?

所需的输出是

> Country                     Code
> 'Bolivia'                   'BOL'
> 'Bolivia, The Republic of'  'BOL'

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

使用CountryCode列创建Countrymap的反向字典:

new_countrycode = {v:key for key,value in CountryCode.items() for v in value}
df['Code'] = df['Country'].map(new_countrycode)

print(df)
                    Country Code
0                   Bolivia  BOL
1  Bolivia, The Republic of  BOL

print(new_countrycode)
{'Bolivia': 'BOL', 'Bolivia, The Republic of': 'BOL'}

答案 1 :(得分:1)

使用.apply()

df["Code"] = df.Country.apply(lambda x: ''.join(i for i, j in CountryCode.items() if x in j))

输出:

                    Country Code
0                   Bolivia  BOL
1  Bolivia, The Republic of  BOL

答案 2 :(得分:0)

df=pd.DataFrame({'Country':['Bolivia','Bolivia, The Republic of'],'code':[None,None]})

从键值代码字典创建数据框

df_keyval=pd.DataFrame({'CountryCode':{'BOL':['Bolivia','Bolivia, The Republic of']}}).reset_index()

匹配国家/地区并获取相应的密钥:

for idx,rows in df.iterrows():
    if rows['Country'] in df_keyval.CountryCode[0]:
        df['code']=df_keyval.index[0]

输出:

    Country                    code
0   Bolivia                     BOL
1   Bolivia, The Republic of    BOL