Adjusted net national income per capita (current US$)

Source: worldbank.org, 03.09.2025

Year: 2021

Flag Country Value Value change, % Rank
Aruba Aruba 24,725 +20.1% 26
Afghanistan Afghanistan 341 -28.4% 166
Angola Angola 1,232 +12% 137
Albania Albania 5,263 +21.8% 74
Argentina Argentina 9,092 +25.6% 51
Armenia Armenia 3,791 +4.8% 89
Australia Australia 45,711 +14.2% 12
Austria Austria 43,282 +9.53% 15
Azerbaijan Azerbaijan 3,965 +12.3% 86
Burundi Burundi 151 +0.6% 169
Belgium Belgium 41,743 +13.4% 18
Benin Benin 1,173 +10.9% 138
Burkina Faso Burkina Faso 670 -2.03% 151
Bangladesh Bangladesh 2,567 +11.3% 116
Bulgaria Bulgaria 10,690 +21.5% 50
Bahamas Bahamas 24,896 +13.6% 25
Bosnia & Herzegovina Bosnia & Herzegovina 6,019 +18% 66
Belarus Belarus 5,812 +11.7% 68
Belize Belize 4,881 +15.5% 77
Bolivia Bolivia 2,657 +0.14% 115
Brazil Brazil 5,776 +7.6% 69
Barbados Barbados 14,760 +2.67% 41
Brunei Brunei 22,736 +2.61% 29
Bhutan Bhutan 2,945 +8.09% 108
Botswana Botswana 5,456 +11.1% 71
Central African Republic Central African Republic 417 +6.35% 163
Canada Canada 41,986 +20.1% 17
Switzerland Switzerland 69,632 +10.6% 3
Chile Chile 11,117 +14.4% 49
China China 9,015 +20% 52
Côte d’Ivoire Côte d’Ivoire 2,164 +9.73% 118
Cameroon Cameroon 1,377 +7.12% 133
Congo - Kinshasa Congo - Kinshasa 328 -17.4% 168
Congo - Brazzaville Congo - Brazzaville 1,069 +39.9% 140
Colombia Colombia 5,127 +11.3% 76
Comoros Comoros 1,453 +3.82% 132
Cape Verde Cape Verde 3,210 +13% 99
Costa Rica Costa Rica 11,172 +1.74% 48
Cyprus Cyprus 24,687 +9.78% 27
Czechia Czechia 19,844 +17.8% 32
Germany Germany 42,982 +10.1% 16
Djibouti Djibouti 2,747 +10.7% 113
Dominica Dominica 7,024 +8.6% 63
Denmark Denmark 58,796 +12.5% 5
Dominican Republic Dominican Republic 7,364 +16.6% 61
Algeria Algeria 2,810 +4.45% 110
Ecuador Ecuador 4,421 +2.4% 82
Egypt Egypt 3,185 +7.42% 102
Spain Spain 25,104 +12.4% 24
Estonia Estonia 22,462 +17.4% 30
Ethiopia Ethiopia 787 +0.914% 148
Finland Finland 44,416 +9.93% 13
Fiji Fiji 3,782 -4.32% 90
France France 36,448 +14.2% 20
Micronesia (Federated States of) Micronesia (Federated States of) 3,741 -2.67% 91
Gabon Gabon 4,438 +4.03% 81
Georgia Georgia 4,085 +16.7% 85
Ghana Ghana 1,842 -0.578% 122
Guinea Guinea 855 +6.68% 146
Gambia Gambia 624 +9.46% 154
Guinea-Bissau Guinea-Bissau 678 +10.9% 149
Equatorial Guinea Equatorial Guinea 2,709 +20.8% 114
Greece Greece 17,263 +17% 36
Guatemala Guatemala 4,189 +8.44% 84
Guyana Guyana 6,274 +11.2% 65
Honduras Honduras 2,404 +14.7% 117
Croatia Croatia 14,553 +19% 43
Haiti Haiti 1,736 +42.8% 128
Hungary Hungary 14,921 +14.6% 40
Indonesia Indonesia 3,189 +8.72% 101
India India 1,907 +16.4% 121
Ireland Ireland 48,856 +23.6% 10
Iran Iran 2,981 +43.9% 107
Iraq Iraq 3,732 +5.39% 92
Iceland Iceland 54,204 +12.9% 6
Israel Israel 43,495 +16% 14
Italy Italy 29,682 +13.3% 22
Jamaica Jamaica 4,688 +6.99% 79
Jordan Jordan 3,935 +2.04% 87
Japan Japan 30,520 -2.47% 21
Kazakhstan Kazakhstan 6,363 -2.36% 64
Kenya Kenya 1,790 +8.86% 125
Kyrgyzstan Kyrgyzstan 870 -4.36% 145
Cambodia Cambodia 1,344 +0.946% 136
Kiribati Kiribati 2,802 +9.46% 111
South Korea South Korea 28,059 +10.2% 23
Laos Laos 1,838 -4.71% 123
Lebanon Lebanon 3,027 -28.7% 105
Liberia Liberia 339 +3.37% 167
Libya Libya 4,639 -27.5% 80
St. Lucia St. Lucia 7,655 +9.49% 58
Sri Lanka Sri Lanka 3,612 +3.46% 95
Lesotho Lesotho 1,037 +11.9% 142
Lithuania Lithuania 19,904 +17% 31
Luxembourg Luxembourg 77,781 +16.9% 1
Latvia Latvia 16,239 +14.8% 37
Morocco Morocco 3,373 +15.9% 97
Moldova Moldova 4,753 +16% 78
Madagascar Madagascar 421 +9.79% 161
Maldives Maldives 8,388 +39.8% 55
Mexico Mexico 7,444 +13.9% 59
North Macedonia North Macedonia 5,996 +12.6% 67
Mali Mali 648 -3.56% 153
Myanmar (Burma) Myanmar (Burma) 1,050 -20.1% 141
Montenegro Montenegro 8,404 +24.1% 54
Mongolia Mongolia 2,762 -6.02% 112
Mozambique Mozambique 371 +7.32% 164
Mauritania Mauritania 1,772 +7.54% 126
Mauritius Mauritius 8,168 +0.904% 56
Malawi Malawi 563 +1.12% 158
Malaysia Malaysia 7,705 +5.23% 57
Namibia Namibia 3,618 +8.49% 94
Niger Niger 592 +11.2% 157
Nigeria Nigeria 1,663 -2.09% 129
Nicaragua Nicaragua 1,747 +7.33% 127
Netherlands Netherlands 46,420 +12.4% 11
Norway Norway 69,953 +29.7% 2
Nepal Nepal 1,148 +5.85% 139
New Zealand New Zealand 40,518 +17.3% 19
Oman Oman 12,558 +4.31% 44
Pakistan Pakistan 1,363 +14.6% 135
Panama Panama 11,847 +8.78% 47
Peru Peru 5,142 -2.63% 75
Philippines Philippines 3,196 +2.11% 100
Papua New Guinea Papua New Guinea 1,832 -7.97% 124
Poland Poland 15,411 +14.4% 38
Portugal Portugal 19,318 +10.6% 33
Paraguay Paraguay 5,264 +10.9% 73
Qatar Qatar 51,677 +35.3% 8
Romania Romania 12,194 +12.9% 46
Russia Russia 8,993 +11.3% 53
Rwanda Rwanda 674 +6.36% 150
Sudan Sudan 598 +23.3% 156
Senegal Senegal 1,377 +8.62% 134
Singapore Singapore 50,690 +24.1% 9
Solomon Islands Solomon Islands 1,974 +2.22% 119
Sierra Leone Sierra Leone 426 -2.63% 160
El Salvador El Salvador 3,711 +15.7% 93
Somalia Somalia 356 +7.13% 165
Serbia Serbia 7,432 +17% 60
São Tomé & Príncipe São Tomé & Príncipe 1,919 +13% 120
Suriname Suriname 3,133 -0.767% 104
Slovakia Slovakia 17,386 +9.52% 35
Slovenia Slovenia 23,493 +15.5% 28
Sweden Sweden 51,831 +14.4% 7
Eswatini Eswatini 2,886 +22.2% 109
Seychelles Seychelles 12,252 +14.3% 45
Turks & Caicos Islands Turks & Caicos Islands 18,783 +5.6% 34
Chad Chad 469 +6.38% 159
Togo Togo 832 +5.89% 147
Thailand Thailand 5,393 -0.891% 72
Tajikistan Tajikistan 909 +6.79% 144
Timor-Leste Timor-Leste 418 -65.2% 162
Tonga Tonga 4,284 -5.88% 83
Trinidad & Tobago Trinidad & Tobago 15,143 +22.2% 39
Tunisia Tunisia 3,285 +10.1% 98
Tanzania Tanzania 972 +3.49% 143
Uganda Uganda 654 +2.77% 152
Ukraine Ukraine 3,919 +19.5% 88
Uruguay Uruguay 14,719 +6.79% 42
United States United States 58,997 +9.53% 4
Uzbekistan Uzbekistan 1,458 +2.47% 131
St. Vincent & Grenadines St. Vincent & Grenadines 7,286 +4.29% 62
Vietnam Vietnam 2,992 +3.25% 106
Vanuatu Vanuatu 3,160 +3.76% 103
Samoa Samoa 3,539 -1.86% 96
South Africa South Africa 5,521 +22.1% 70
Zambia Zambia 611 -12% 155
Zimbabwe Zimbabwe 1,491 +27.2% 130

                    
# 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.PC.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.PC.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))