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
  • 147,904
  • 31
  • 244
  • 302
Nabih Bawazir
  • 5,275
  • 6
  • 29
  • 53

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
  • 147,904
  • 31
  • 244
  • 302
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
  • 729,927
  • 78
  • 1,141
  • 1,090