Net primary income (Net income from abroad) (current US$)

Source: worldbank.org, 03.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Angola Angola -6,586,315,951 -18.3% 122
Albania Albania -206,733,205 -31.3% 55
Andorra Andorra 174,047,612 +31% 25
United Arab Emirates United Arab Emirates 1,039,281,109 -72.9% 15
Argentina Argentina -12,766,376,338 -4.34% 133
Armenia Armenia -939,052,546 +44.1% 80
Antigua & Barbuda Antigua & Barbuda -102,400,000 +10.1% 50
Australia Australia -58,851,835,875 -20.8% 150
Azerbaijan Azerbaijan -2,734,735,000 -11.2% 106
Burundi Burundi 10,218,573 +76.1% 34
Benin Benin -202,388,350 +6.93% 54
Burkina Faso Burkina Faso -1,009,087,466 +20.1% 83
Bangladesh Bangladesh 19,383,315,352 +11% 7
Bulgaria Bulgaria -5,352,311,856 +6.83% 119
Bahrain Bahrain -2,555,403,853 -2% 104
Bosnia & Herzegovina Bosnia & Herzegovina -88,952,148 -44.1% 49
Belarus Belarus -1,811,100,000 -22.9% 92
Belize Belize -129,932,850 +16.9% 52
Bermuda Bermuda 351,327,171 +96.2% 19
Bolivia Bolivia -1,362,519,899 +7.38% 88
Brazil Brazil -66,931,150,849 -3.73% 151
Barbados Barbados -294,000,000 +10.1% 59
Brunei Brunei 490,615,493 +153% 17
Central African Republic Central African Republic 165,572,459 +9.62% 27
Canada Canada -34,058,252,007 -10.8% 145
Chile Chile -16,999,569,774 +17.5% 140
China China -130,761,487,274 -12.5% 153
Côte d’Ivoire Côte d’Ivoire -3,473,433,386 +13.8% 112
Cameroon Cameroon -920,927,403 -5% 78
Congo - Kinshasa Congo - Kinshasa -2,353,496,373 +12.3% 100
Congo - Brazzaville Congo - Brazzaville -733,613,133 -5.28% 73
Colombia Colombia -8,485,595,443 -10% 129
Comoros Comoros 7,820,101 +5.92% 35
Cape Verde Cape Verde -51,896,792 +73.8% 46
Costa Rica Costa Rica -6,937,205,947 +15.2% 125
Cyprus Cyprus -3,901,882,259 +20.3% 114
Germany Germany 166,399,761,363 +4.93% 1
Djibouti Djibouti 37,494,201 -63.6% 30
Dominica Dominica 2,659,259 -714% 37
Denmark Denmark 14,711,041,175 +27% 8
Dominican Republic Dominican Republic -6,723,000,038 +23.6% 124
Algeria Algeria -5,039,489,651 +40.6% 117
Ecuador Ecuador -3,336,591,100 +18.5% 110
Egypt Egypt -17,537,200,000 +1.26% 141
Fiji Fiji -420,903,773 +35.1% 64
Micronesia (Federated States of) Micronesia (Federated States of) 37,300,000 -15.7% 31
Gabon Gabon -1,906,846,990 +15.7% 94
Georgia Georgia -2,194,643,521 -8.16% 98
Ghana Ghana -3,079,166,163 -40% 108
Guinea Guinea -2,106,262,056 +9.04% 97
Gambia Gambia -32,000,000 +46% 44
Guinea-Bissau Guinea-Bissau 15,683,722 +30.6% 33
Equatorial Guinea Equatorial Guinea -3,808,578,274 +4.19% 113
Grenada Grenada -132,900,000 -4.25% 53
Guatemala Guatemala -1,591,237,138 -17.6% 91
Guyana Guyana -8,575,010,000 +150% 130
Hong Kong SAR China Hong Kong SAR China 38,545,929,930 +19.4% 4
Honduras Honduras -2,902,547,743 +11.7% 107
Croatia Croatia 359,737,864 -226% 18
Haiti Haiti 3,619,915 -16% 36
Indonesia Indonesia -36,860,471,519 +1.69% 146
India India -56,533,064,977 +13.6% 149
Iran Iran -614,114,641 -36.8% 72
Iraq Iraq 1,693,200,000 +74% 12
Israel Israel -4,235,654,991 +44.6% 115
Italy Italy -15,165,232,748 +25.5% 136
Jamaica Jamaica -425,924,259 +47.3% 65
Jordan Jordan -1,245,943,662 +229% 85
Kazakhstan Kazakhstan -20,790,541,110 -21.9% 142
Kenya Kenya -1,941,231,676 +2.89% 95
Kyrgyzstan Kyrgyzstan -596,293,179 +207% 71
Cambodia Cambodia -859,942,198 -9.68% 76
Kiribati Kiribati 190,054,099 +1.61% 24
St. Kitts & Nevis St. Kitts & Nevis -12,400,000 -28.3% 41
Kuwait Kuwait 33,599,102,470 +4.08% 5
Laos Laos -1,047,128,765 -9.53% 84
Liberia Liberia -321,000,000 +17.6% 60
Libya Libya 305,684,275 +43.8% 21
St. Lucia St. Lucia -222,648,148 +11.8% 57
Sri Lanka Sri Lanka -2,464,940,470 -3.13% 102
Morocco Morocco -2,383,333,752 +15.5% 101
Moldova Moldova 157,937,926 -40.8% 28
Madagascar Madagascar -452,308,704 +31% 68
Maldives Maldives -764,788,131 +1.05% 74
Mexico Mexico -55,160,887,528 +23.6% 148
Marshall Islands Marshall Islands 52,043,986 +3.06% 29
North Macedonia North Macedonia -866,839,995 +7.98% 77
Mali Mali -769,935,038 -16.8% 75
Malta Malta -3,431,053,842 +14.2% 111
Myanmar (Burma) Myanmar (Burma) -927,000,000 -25.7% 79
Montenegro Montenegro -23,044,094 -132% 43
Mongolia Mongolia -2,681,350,472 +20.3% 105
Mozambique Mozambique -2,516,270,065 +37% 103
Mauritania Mauritania -104,293,464 -1,316% 51
Mauritius Mauritius 1,581,547,215 +18.3% 13
Malawi Malawi -388,413,121 +7% 63
Malaysia Malaysia -13,435,933,535 +15.8% 134
Namibia Namibia -445,749,182 -24.9% 67
Niger Niger -242,436,118 +23.6% 58
Nigeria Nigeria -6,631,999,998 -39.4% 123
Nicaragua Nicaragua -988,900,001 +22.7% 82
Nepal Nepal 704,320,183 +46.5% 16
Oman Oman -7,242,870,741 +38.8% 127
Pakistan Pakistan -8,986,000,000 +55.9% 131
Panama Panama -4,402,500,800 +9.17% 116
Peru Peru -16,731,199,310 +17.2% 139
Philippines Philippines 60,148,926,723 +25.6% 2
Papua New Guinea Papua New Guinea -1,849,659,087 -19.4% 93
Poland Poland -30,805,748,517 -0.53% 144
Puerto Rico Puerto Rico -40,214,200,000 +10.3% 147
Portugal Portugal -5,668,773,959 -26.2% 121
Paraguay Paraguay -1,494,179,539 -5.81% 90
Palestinian Territories Palestinian Territories 2,936,247,000 -20.1% 11
Qatar Qatar -7,218,131,868 +18.8% 126
Romania Romania -10,151,715,031 +17.2% 132
Russia Russia -28,485,822,153 +6.1% 143
Rwanda Rwanda -350,850,501 +25.2% 61
Saudi Arabia Saudi Arabia 6,166,900,000 -20% 9
Sudan Sudan -1,404,685,011 +45% 89
Senegal Senegal -980,212,690 -5.11% 81
Singapore Singapore -88,990,093,794 -4.28% 152
Solomon Islands Solomon Islands 1,658,672 -93.4% 38
Sierra Leone Sierra Leone -63,020,003 +16.8% 47
El Salvador El Salvador -2,256,260,000 +5.48% 99
Somalia Somalia -47,000,000 +11.9% 45
Serbia Serbia -5,572,980,595 +31.5% 120
São Tomé & Príncipe São Tomé & Príncipe -700,000 -110% 39
Suriname Suriname -366,216,511 +14.2% 62
Slovakia Slovakia -3,204,220,691 +14.7% 109
Sweden Sweden 26,788,771,714 +6.95% 6
Eswatini Eswatini -429,082,868 +39.1% 66
Seychelles Seychelles -68,930,156 +16.1% 48
Chad Chad -211,208,148 +9.59% 56
Togo Togo 22,617,264 +11.8% 32
Thailand Thailand -14,723,148,470 +14% 135
Tajikistan Tajikistan 4,454,261,950 +47% 10
Turkmenistan Turkmenistan -589,377,829 +17.8% 70
Trinidad & Tobago Trinidad & Tobago 191,000,000 -62.2% 23
Tunisia Tunisia -1,337,838,943 +10.8% 87
Turkey Turkey -15,779,000,000 +38.2% 138
Tanzania Tanzania -1,972,015,858 +30.7% 96
Uganda Uganda -1,290,940,498 +5.08% 86
Ukraine Ukraine 330,000,000 -93.5% 20
Uruguay Uruguay -5,236,018,127 -4.86% 118
United States United States 58,218,000,000 -41.8% 3
Uzbekistan Uzbekistan 1,134,794,800 +14.4% 14
St. Vincent & Grenadines St. Vincent & Grenadines -10,188,889 -552% 40
Vietnam Vietnam -15,693,000,000 -30.1% 137
Vanuatu Vanuatu 166,231,939 +7.46% 26
Samoa Samoa -16,509,308 +20.8% 42
Kosovo Kosovo 236,100,813 +9.77% 22
South Africa South Africa -7,908,053,255 +53.1% 128
Zimbabwe Zimbabwe -509,030,527 +16.9% 69

                    
# 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.GSR.NFCY.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.GSR.NFCY.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))