Объедините две диаграммы данных панд по столбцу (коды стран) - PullRequest
0 голосов
/ 03 июня 2018

Я хочу, чтобы коды стран были представлены в кадре данных df как alpha_3_code, в моем поле Nationality_Codes of df2 dataframe.Для каждой строки в df2 я хочу сопоставить Reviewer_Nationality с en_short_name в df, а при совпадении назначить код страны для Nationality_Codes в df2.

df2.head()

Nationality_Codes   Reviewer_Nationality    Reviewer_Score
NaN                       Russia                  2.9
NaN                       United Kingdom          7.5
NaN                       Australia               7.1
NaN                       United Kingdom          3.8
NaN                       Russia                  6.7

df.head()

alpha_3_code       en_short_name           nationality
RUS                 Russia                  Russian
ALA                 Åland Islands           Åland Island
ALB                 Albania                 Albanian 
AUS                 Australia               Australian
UK                  United Kingdom          British, UK

Окончательный результат должен быть:

df2.head()

Nationality_Codes   Reviewer_Nationality    Reviewer_Score
RUS                       Russia                  2.9
UK                        United Kingdom          7.5
AUS                       Australia               7.1
UK                        United Kingdom          3.8
RUS                       Russia                  6.7

Я пробовал этот код, но не сработал.

for index, row in df.iterrows():
for index2, row2 in df2.iterrows():
    if row2['Reviewer_Nationality']==row['en_short_name']:
        df2['Nationality_Codes'][row2]=df['alpha_3_code'][row2]

Кто-нибудь может мне помочь?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Попробуйте это:

merged = df[['alpha_3_code', 'en_short_name']].merge(df2[['Reviewer_Nationality',
                                                    'Reviewer_Score']],
left_on='en_short_name', right_on='Reviewer_Nationality', how='left')]
.rename(columns={'alpha_3_code': 'Nationality_Codes'})\
.drop('en_short_name', axis=1)
0 голосов
/ 03 июня 2018

Одним из способов было бы создать сопоставление серий для ваших английских имен и кодов и использовать .map:

#my_map = pd.Series(df.alpha_3_code.values,index=df.en_short_name)
my_map = df.set_index('en_short_name')['alpha_3_code']

df2['Nationality_Codes'] = df2['Reviewer_Nationality'].map(my_map)

Вывод:

>>> df2
  Nationality_Codes Reviewer_Nationality  Reviewer_Score
0               RUS               Russia             2.9
1                UK       United Kingdom             7.5
2               AUS            Australia             7.1
3                UK       United Kingdom             3.8
4               RUS               Russia             6.7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...