Заполнение NaN в столбце DataFrame ключом из словаря путем поиска значений из другого столбца - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть набор данных, который выглядит следующим образом:

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

И у меня также есть словарь

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

Как перейти к заполнению в кадре данных с соответствующим ключом, еслиодно из значений находится в словаре?

Требуемый вывод:

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

Спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Создать обратный словарь из CountryCode и map с помощью Country столбца:

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'}
0 голосов
/ 23 ноября 2018

Использование .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
0 голосов
/ 23 ноября 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...