Как добавить столбцы из одного фрейма данных в другой на основе определенного правила - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь объединить таблицу из https://www.cia.gov/library/publications/the-world-factbook/fields/2127.html с https://www.cia.gov/library/publications/the-world-factbook/rankorder/2004rank.html.

Итак, чтобы создать 2 кадра данных, я делаю следующее:

url = 'https://www.cia.gov/library/publications/the-world- 
factbook/fields/2127.html'
url2 = 'https://www.cia.gov/library/publications/the-world- 
factbook/rankorder/2004rank.html'
d = {'TOTAL FERTILITY RATE(CHILDREN BORN/WOMAN)':'TFR'}
d2 = {'Country','GDP - PER CAPITA (PPP)':'GDP (PPP)'}
df = pd.read_html(url, header=0)[0].rename(columns=d)
df2 = pd.read_html(url2, header=0)[0].rename(columns=d2)
df['TFR'] = pd.to_numeric(df['TFR'].str[:-31])

Теперь я создаю субфрейм из df2:

df21 = df2[['Country','GDP (PPP)']]

Таким образом, я получаю df21, который содержит названия стран и их ВВП.Теперь я хотел бы сравнить два фрейма данных и назначить значения в ВВП (ППС) для каждой страны в df на основе их названия (как в df, так и в df2 есть столбец, содержащий название страны).Есть идеи как это сделать?

1 Ответ

0 голосов
/ 11 октября 2018

Используйте merge с левым соединением или map:

df3 = df.merge(df2[['Country','GDP (PPP)']], how='left')
print (df3.head())
          Country   TFR GDP (PPP)
0     Afghanistan  5.12    $2,000
1         Albania  1.51   $12,500
2         Algeria  2.70   $15,200
3  American Samoa  2.68   $11,200
4         Andorra  1.40   $49,900

df['GDP (PPP)'] = df['Country'].map(df2.set_index('Country')['GDP (PPP)'])
print (df.head())
          Country   TFR GDP (PPP)
0     Afghanistan  5.12    $2,000
1         Albania  1.51   $12,500
2         Algeria  2.70   $15,200
3  American Samoa  2.68   $11,200
4         Andorra  1.40   $49,900

Если значения в стране от df2['Country'] несуществует в df['Country'] создан NaN:

print (df[df['GDP (PPP)'].isna()])
                     Country   TFR GDP (PPP)
43          Christmas Island   NaN       NaN
44   Cocos (Keeling) Islands   NaN       NaN
78                Gaza Strip  4.13       NaN
154           Norfolk Island   NaN       NaN
165         Pitcairn Islands   NaN       NaN
191                  Somalia  5.80       NaN
198                 Svalbard   NaN       NaN
230                    World  2.42       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...