Adjusted net national income (current US$)

Source: worldbank.org, 03.09.2025

Year: 2021

Flag Country Value Value change, % Rank
Aruba Aruba 2,662,868,130 +19.1% 145
Afghanistan Afghanistan 13,621,070,039 -26.7% 110
Angola Angola 42,541,367,192 +15.6% 78
Albania Albania 14,797,555,219 +20.6% 105
Argentina Argentina 411,983,137,960 +25.9% 22
Armenia Armenia 11,228,790,134 +4.83% 120
Australia Australia 1,174,103,054,110 +14.3% 13
Austria Austria 387,622,418,853 +10% 24
Azerbaijan Azerbaijan 40,200,481,168 +12.8% 79
Burundi Burundi 1,956,913,335 +3.38% 149
Belgium Belgium 483,642,703,342 +13.9% 20
Benin Benin 15,737,769,728 +13.8% 103
Burkina Faso Burkina Faso 14,738,025,608 +0.326% 106
Bangladesh Bangladesh 430,454,772,495 +12.3% 21
Bulgaria Bulgaria 69,565,093,348 +20.7% 61
Bahamas Bahamas 9,868,277,249 +13.8% 126
Bosnia & Herzegovina Bosnia & Herzegovina 19,531,593,962 +16.1% 100
Belarus Belarus 54,066,826,263 +10.8% 70
Belize Belize 1,929,542,246 +16.8% 151
Bolivia Bolivia 31,712,478,522 +1.17% 86
Brazil Brazil 1,210,328,882,716 +8.06% 11
Barbados Barbados 4,164,575,079 +2.84% 140
Brunei Brunei 10,270,331,724 +3.6% 124
Bhutan Bhutan 2,283,956,483 +8.85% 147
Botswana Botswana 13,101,223,231 +12.7% 112
Central African Republic Central African Republic 2,133,963,401 +8.15% 148
Canada Canada 1,605,547,834,423 +20.8% 8
Switzerland Switzerland 606,111,972,185 +11.4% 17
Chile Chile 216,294,036,018 +14.9% 41
China China 12,732,916,907,123 +20.1% 2
Côte d’Ivoire Côte d’Ivoire 64,141,668,493 +12.5% 62
Cameroon Cameroon 37,065,481,266 +10% 81
Congo - Kinshasa Congo - Kinshasa 32,501,996,856 -14.7% 85
Congo - Brazzaville Congo - Brazzaville 6,299,969,558 +43.3% 133
Colombia Colombia 262,457,593,211 +12.6% 37
Comoros Comoros 1,188,775,714 +5.89% 159
Cape Verde Cape Verde 1,658,457,519 +13.4% 153
Costa Rica Costa Rica 56,532,369,848 +2.26% 65
Cyprus Cyprus 22,227,522,576 +10.8% 96
Czechia Czechia 208,474,258,825 +15.7% 42
Germany Germany 3,575,973,916,048 +10.1% 4
Djibouti Djibouti 3,080,405,148 +12.3% 144
Dominica Dominica 472,053,856 +8.01% 165
Denmark Denmark 344,354,581,496 +13% 30
Dominican Republic Dominican Republic 81,914,377,873 +17.9% 57
Algeria Algeria 125,758,796,095 +6.15% 52
Ecuador Ecuador 78,171,039,767 +3.19% 59
Egypt Egypt 353,377,027,801 +9.03% 29
Spain Spain 1,191,011,399,598 +12.6% 12
Estonia Estonia 29,895,880,046 +17.5% 89
Ethiopia Ethiopia 96,072,352,512 +3.65% 54
Finland Finland 246,110,920,378 +10.2% 39
Fiji Fiji 3,467,195,322 -4.14% 142
France France 2,472,706,177,012 +14.6% 6
Micronesia (Federated States of) Micronesia (Federated States of) 417,569,530 -2.05% 168
Gabon Gabon 10,548,966,347 +6.45% 122
Georgia Georgia 15,149,562,721 +16.3% 104
Ghana Ghana 59,884,261,177 +1.39% 63
Guinea Guinea 11,717,268,332 +9.39% 117
Gambia Gambia 1,607,615,266 +12.1% 154
Guinea-Bissau Guinea-Bissau 1,395,970,355 +13.4% 156
Equatorial Guinea Equatorial Guinea 4,765,088,217 +23.7% 138
Greece Greece 182,451,850,459 +15.6% 45
Guatemala Guatemala 73,724,408,676 +9.95% 60
Guyana Guyana 5,116,380,908 +12.3% 137
Honduras Honduras 24,740,496,571 +16.6% 91
Croatia Croatia 56,452,688,748 +17.9% 67
Haiti Haiti 19,746,452,204 +44.4% 99
Hungary Hungary 143,700,403,603 +14.1% 49
Indonesia Indonesia 882,648,696,181 +9.49% 15
India India 2,697,069,318,283 +17.4% 5
Ireland Ireland 249,681,049,442 +25.3% 38
Iran Iran 263,716,617,868 +45.1% 36
Iraq Iraq 160,734,736,217 +7.78% 48
Iceland Iceland 20,192,232,160 +14.8% 98
Israel Israel 407,604,376,046 +17.9% 23
Italy Italy 1,755,164,652,452 +12.8% 7
Jamaica Jamaica 13,302,280,442 +7.26% 111
Jordan Jordan 43,544,134,322 +3.93% 77
Japan Japan 3,835,811,076,722 -2.92% 3
Kazakhstan Kazakhstan 125,621,275,946 -1.05% 53
Kenya Kenya 95,240,841,983 +10.9% 55
Kyrgyzstan Kyrgyzstan 5,963,757,454 -2.59% 135
Cambodia Cambodia 22,808,826,441 +2.45% 95
Kiribati Kiribati 359,689,527 +11.4% 169
South Korea South Korea 1,452,592,702,573 +10.1% 9
Laos Laos 13,698,049,433 -3.32% 109
Lebanon Lebanon 17,307,089,418 -28.5% 102
Liberia Liberia 1,783,546,450 +5.58% 152
Libya Libya 33,096,515,120 -26.5% 84
St. Lucia St. Lucia 1,366,615,022 +9.65% 157
Sri Lanka Sri Lanka 80,018,415,420 +4.58% 58
Lesotho Lesotho 2,346,092,294 +13.1% 146
Lithuania Lithuania 55,896,758,252 +16.9% 69
Luxembourg Luxembourg 49,784,930,446 +18.7% 75
Latvia Latvia 30,602,025,360 +13.8% 87
Morocco Morocco 126,525,657,646 +17.1% 51
Moldova Moldova 12,338,542,741 +14.2% 114
Madagascar Madagascar 12,500,340,516 +12.6% 113
Maldives Maldives 4,329,718,253 +43.7% 139
Mexico Mexico 950,153,268,147 +14.7% 14
North Macedonia North Macedonia 11,015,539,375 +11.4% 121
Mali Mali 14,504,169,501 -0.559% 108
Myanmar (Burma) Myanmar (Burma) 56,036,281,288 -19.5% 68
Montenegro Montenegro 5,252,776,809 +23.8% 136
Mongolia Mongolia 9,347,566,300 -4.43% 127
Mozambique Mozambique 11,748,409,339 +10.5% 116
Mauritania Mauritania 8,391,225,495 +10.7% 130
Mauritius Mauritius 10,343,032,087 +0.93% 123
Malawi Malawi 11,287,506,854 +3.77% 119
Malaysia Malaysia 264,144,293,995 +6.45% 35
Namibia Namibia 10,168,489,776 +11.7% 125
Niger Niger 14,510,811,838 +14.9% 107
Nigeria Nigeria 363,312,013,595 -0.0134% 27
Nicaragua Nicaragua 11,611,573,902 +8.63% 118
Netherlands Netherlands 813,878,767,423 +13% 16
Norway Norway 378,328,312,983 +30.4% 26
Nepal Nepal 33,841,986,562 +7.7% 83
New Zealand New Zealand 207,100,908,404 +17.8% 43
Oman Oman 56,515,483,862 +3.8% 66
Pakistan Pakistan 326,464,029,639 +16.8% 32
Panama Panama 51,479,784,106 +10.1% 71
Peru Peru 170,492,332,492 -1.69% 46
Philippines Philippines 361,503,537,885 +3.04% 28
Papua New Guinea Papua New Guinea 18,341,899,499 -6.12% 101
Poland Poland 569,915,124,774 +12.8% 18
Portugal Portugal 200,174,696,010 +11.3% 44
Paraguay Paraguay 35,184,118,794 +12.2% 82
Qatar Qatar 129,445,374,904 +21.3% 50
Romania Romania 233,181,340,765 +12.1% 40
Russia Russia 1,323,903,854,188 +10.9% 10
Rwanda Rwanda 8,997,489,878 +8.72% 129
Sudan Sudan 28,763,839,535 +26.7% 90
Senegal Senegal 23,712,074,300 +11.4% 92
Singapore Singapore 276,441,220,735 +19% 34
Solomon Islands Solomon Islands 1,505,399,373 +4.71% 155
Sierra Leone Sierra Leone 3,449,813,486 -0.394% 143
El Salvador El Salvador 23,213,085,150 +16% 94
Somalia Somalia 6,155,445,283 +11.1% 134
Serbia Serbia 50,790,254,321 +15.9% 72
São Tomé & Príncipe São Tomé & Príncipe 426,049,350 +15.3% 167
Suriname Suriname 1,935,667,027 +0.137% 150
Slovakia Slovakia 94,707,685,029 +9.29% 56
Slovenia Slovenia 49,526,101,070 +15.8% 76
Sweden Sweden 539,858,010,829 +15% 19
Eswatini Eswatini 3,482,722,072 +23.6% 141
Seychelles Seychelles 1,216,133,029 +15.2% 158
Turks & Caicos Islands Turks & Caicos Islands 849,820,405 +7.64% 161
Chad Chad 8,355,160,089 +10.1% 131
Togo Togo 7,389,560,188 +8.44% 132
Thailand Thailand 386,826,546,804 -0.772% 25
Tajikistan Tajikistan 9,055,722,664 +9.18% 128
Timor-Leste Timor-Leste 564,159,462 -64.6% 164
Tonga Tonga 451,921,466 -6.07% 166
Trinidad & Tobago Trinidad & Tobago 20,708,680,378 +22.2% 97
Tunisia Tunisia 39,584,781,007 +10.8% 80
Tanzania Tanzania 59,188,718,347 +6.63% 64
Uganda Uganda 30,031,521,812 +6.13% 88
Ukraine Ukraine 163,914,375,539 +18.4% 47
Uruguay Uruguay 49,994,553,832 +6.72% 73
United States United States 19,593,000,990,250 +9.7% 1
Uzbekistan Uzbekistan 49,922,061,226 +4.47% 74
St. Vincent & Grenadines St. Vincent & Grenadines 749,251,352 +3.6% 163
Vietnam Vietnam 296,054,908,425 +4.15% 33
Vanuatu Vanuatu 966,468,685 +6.19% 160
Samoa Samoa 756,550,038 -1.01% 162
South Africa South Africa 339,552,672,450 +24% 31
Zambia Zambia 11,969,103,805 -9.44% 115
Zimbabwe Zimbabwe 23,546,536,254 +29.4% 93

                    
# Install missing packages
import sys
import subprocess

def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])

# Required packages
for package in ['wbdata', 'country_converter']:
try:
__import__(package)
except ImportError:
install(package)

# Import libraries
import wbdata
import country_converter as coco
from datetime import datetime

# Define World Bank indicator code
dataset_code = 'NY.ADJ.NNTY.CD'

# Download data from World Bank API
data = wbdata.get_dataframe({dataset_code: 'value'},
date=(datetime(1960, 1, 1), datetime.today()),
parse_dates=True,
keep_levels=True).reset_index()

# Extract year
data['year'] = data['date'].dt.year

# Convert country names to ISO codes using country_converter
cc = coco.CountryConverter()
data['iso2c'] = cc.convert(names=data['country'], to='ISO2', not_found=None)
data['iso3c'] = cc.convert(names=data['country'], to='ISO3', not_found=None)

# Filter out rows where ISO codes could not be matched — likely not real countries
data = data[data['iso2c'].notna() & data['iso3c'].notna()]

# Sort for calculation
data = data.sort_values(['iso3c', 'year'])

# Calculate YoY absolute and percent change
data['value_change'] = data.groupby('iso3c')['value'].diff()
data['value_change_percent'] = data.groupby('iso3c')['value'].pct_change() * 100

# Calculate ranks (higher GDP per capita = better rank)
data['rank'] = data.groupby('year')['value'].rank(ascending=False, method='dense')

# Calculate rank change from previous year
data['rank_change'] = data.groupby('iso3c')['rank'].diff()

# Select desired columns
final_df = data[['country', 'iso2c', 'iso3c', 'year', 'value',
'value_change', 'value_change_percent', 'rank', 'rank_change']].copy()

# Optional: Add labels as metadata (could be useful for export or UI)
column_labels = {
'country': 'Country name',
'iso2c': 'ISO 2-letter country code',
'iso3c': 'ISO 3-letter country code',
'year': 'Year',
'value': 'GDP per capita (current US$)',
'value_change': 'Year-over-Year change in value',
'value_change_percent': 'Year-over-Year percent change in value',
'rank': 'Country rank by GDP per capita (higher = richer)',
'rank_change': 'Change in rank from previous year'
}

# Display first few rows
print(final_df.head(10))

# Optional: Save to CSV
#final_df.to_csv("gdp_per_capita_cleaned.csv", index=False)
                    
                
                    
# Check and install required packages
required_packages <- c("WDI", "countrycode", "dplyr")

for (pkg in required_packages) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    install.packages(pkg)
  }
}

# Load the necessary libraries
library(WDI)
library(dplyr)
library(countrycode)

# Define the dataset code (World Bank indicator code)
dataset_code <- 'NY.ADJ.NNTY.CD'

# Download data using WDI package
dat <- WDI(indicator = dataset_code)

# Filter only countries using 'is_country' from countrycode
# This uses iso2c to identify whether the entry is a recognized country
dat <- dat %>%
  filter(countrycode(iso2c, origin = 'iso2c', destination = 'country.name', warn = FALSE) %in%
           countrycode::codelist$country.name.en)

# Ensure dataset is ordered by country and year
dat <- dat %>%
  arrange(iso3c, year)

# Rename the dataset_code column to "value" for easier manipulation
dat <- dat %>%
  rename(value = !!dataset_code)

# Calculate year-over-year (YoY) change and percentage change
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(
    value_change = value - lag(value),                              # Absolute change from previous year
    value_change_percent = 100 * (value - lag(value)) / lag(value) # Percent change from previous year
  ) %>%
  ungroup()

# Calculate rank by year (higher value => higher rank)
dat <- dat %>%
  group_by(year) %>%
  mutate(rank = dense_rank(desc(value))) %>% # Rank countries by descending value
  ungroup()

# Calculate rank change (positive = moved up, negative = moved down)
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(rank_change = rank - lag(rank)) %>% # Change in rank compared to previous year
  ungroup()

# Select and reorder final columns
final_data <- dat %>%
  select(
    country,
    iso2c,
    iso3c,
    year,
    value,
    value_change,
    value_change_percent,
    rank,
    rank_change
  )

# Add labels (variable descriptions)
attr(final_data$country, "label") <- "Country name"
attr(final_data$iso2c, "label") <- "ISO 2-letter country code"
attr(final_data$iso3c, "label") <- "ISO 3-letter country code"
attr(final_data$year, "label") <- "Year"
attr(final_data$value, "label") <- "GDP per capita (current US$)"
attr(final_data$value_change, "label") <- "Year-over-Year change in value"
attr(final_data$value_change_percent, "label") <- "Year-over-Year percent change in value"
attr(final_data$rank, "label") <- "Country rank by GDP per capita (higher = richer)"
attr(final_data$rank_change, "label") <- "Change in rank from previous year"

# Print the first few rows of the final dataset
print(head(final_data, 10))