1

I want to update data based on other pandas dataframe because I just gather better data, here's the example of dataset

Heres my Data

No  Country    Language    Capital
1   Indonesia  Bahasa      Jakarta
2   Malaysia   Bahasa      Kuala Lumpur
3   Brunei     Bahasa      Bandar Seri Begawan
4   Nigeria    English     Abuja

My second dataframe

Nation     Capital City
Malaysia   Lagos
Nigeria    Putrajaya

What I want is

No  Country    Language    Capital
1   Indonesia  Bahasa      Jakarta
2   Malaysia   Bahasa      Putrajaya
3   Brunei     Bahasa      Bandar Seri Begawan
4   Nigeria    English     Lagos
jpp
  • 159,742
  • 34
  • 281
  • 339
Nabih Bawazir
  • 6,381
  • 7
  • 37
  • 70

2 Answers2

3

First create a series from your new mapping:

s = df2.set_index('Nation')['Capital City']

Then use pd.Series.update to update your series in-place:

df1['Capital'].update(df1['Country'].map(s))
jpp
  • 159,742
  • 34
  • 281
  • 339
1

You can use new Series with map, which create for non exist Nations NaNs, whcih are replaced by fillna:

s = df2.set_index('Nation')['Capital City']
df1['Capital'] = df1['Country'].map(s).fillna(df1['Capital'])
print (df1)
   No    Country Language              Capital
0   1  Indonesia   Bahasa              Jakarta
1   2   Malaysia   Bahasa                Lagos
2   3     Brunei   Bahasa  Bandar Seri Begawan
3   4    Nigeria  English            Putrajaya

Or slowier solution with replace:

df1['Capital'] = df1['Country'].replace(s)
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252