Net financial account (BoP, current US$)

Source: worldbank.org, 03.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Angola Angola 7,028,783,740 +27.6% 25
Albania Albania -651,574,063 +860% 69
Argentina Argentina 4,060,699,339 -115% 29
Armenia Armenia -524,585,156 +5.58% 67
Antigua & Barbuda Antigua & Barbuda -150,017,292 -52.3% 60
Australia Australia -34,906,047,569 -2,051% 110
Austria Austria 8,379,985,185 +55.2% 23
Azerbaijan Azerbaijan 4,562,977,000 -52.7% 28
Belgium Belgium -1,813,793,412 -6.03% 83
Bangladesh Bangladesh -2,213,578,450 -166% 87
Bulgaria Bulgaria -727,540,000 -168% 71
Bahrain Bahrain 2,019,148,936 +405% 35
Bahamas Bahamas -904,756,832 -27.4% 74
Bosnia & Herzegovina Bosnia & Herzegovina -845,134,406 +271% 73
Belarus Belarus -1,169,782,037 -4,687% 77
Belize Belize -102,814,083 +126% 58
Brazil Brazil -85,755,035,940 +126% 112
Brunei Brunei 1,685,548,147 +46.4% 36
Bhutan Bhutan -203,655,541 -71.1% 63
Canada Canada -14,041,176,096 +18.6% 102
Switzerland Switzerland 49,474,858,114 -19.5% 14
Chile Chile -7,104,022,157 -15.2% 98
China China 433,909,503,554 +77.7% 1
Colombia Colombia -5,580,730,080 -28.9% 96
Cape Verde Cape Verde 140,666,208 -576% 51
Costa Rica Costa Rica -737,388,239 +20.8% 72
Cyprus Cyprus -2,996,853,366 -3.69% 92
Czechia Czechia 8,849,190,095 +119% 22
Germany Germany 259,443,352,952 +23% 2
Djibouti Djibouti -230,670,539 +10.2% 64
Dominica Dominica 7,445,594 -111% 55
Denmark Denmark 38,403,737,165 +16.7% 15
Dominican Republic Dominican Republic -5,037,700,000 -4.24% 95
Ecuador Ecuador 7,100,710,893 +1,447% 24
Spain Spain 75,310,103,509 +16.4% 8
Estonia Estonia 217,366,894 -121% 48
Finland Finland 972,373,891 -117% 42
France France -23,813,581,898 -38.3% 107
United Kingdom United Kingdom -80,091,996,697 -29.9% 111
Georgia Georgia -1,484,602,031 -11.9% 80
Gambia Gambia -337,201,806 +26.3% 66
Greece Greece -14,448,586,005 +48.8% 103
Grenada Grenada -60,029,669 -68.2% 57
Guatemala Guatemala 2,783,285,630 -1.67% 31
Hong Kong SAR China Hong Kong SAR China 62,435,846,287 +103% 10
Honduras Honduras -1,280,603,172 -7% 79
Croatia Croatia 1,041,324,607 -76.3% 40
Hungary Hungary 1,295,334,854 -270% 37
Indonesia Indonesia -10,266,439,189 +190% 101
India India -31,294,079,957 -2.22% 109
Iceland Iceland 1,021,988,484 -280% 41
Israel Israel 19,775,700,000 -3.65% 18
Italy Italy 55,370,748,036 +62.1% 11
Jamaica Jamaica 1,269,059,397 +20.3% 38
Japan Japan 170,436,525,577 -2.07% 3
Kazakhstan Kazakhstan -2,011,422,402 -74.5% 84
Cambodia Cambodia -689,490,314 +55.8% 70
St. Kitts & Nevis St. Kitts & Nevis -170,287,501 +73.4% 61
South Korea South Korea 95,208,800,000 +197% 6
Kuwait Kuwait 49,857,281,679 -1.43% 13
St. Lucia St. Lucia -40,994,108 +31.6% 56
Lesotho Lesotho 180,225,648 -45.4% 49
Lithuania Lithuania 2,292,004,533 -41.3% 34
Luxembourg Luxembourg 13,134,653,210 +27.6% 19
Latvia Latvia 546,683,164 +679% 44
Moldova Moldova -2,824,011,689 +71% 90
Maldives Maldives -1,118,776,128 -9.97% 75
Mexico Mexico -3,474,808,561 -56% 94
North Macedonia North Macedonia -242,621,998 -325% 65
Malta Malta 2,317,610,905 +11.8% 33
Montenegro Montenegro -1,235,876,271 +49.5% 78
Mozambique Mozambique -2,283,554,659 +21.4% 88
Malaysia Malaysia 6,800,414,810 -692% 26
Namibia Namibia -1,736,207,328 +1.07% 82
Nigeria Nigeria 12,119,731,836 -166% 20
Nicaragua Nicaragua -572,106,197 -230% 68
Netherlands Netherlands 114,504,632,063 +14.5% 4
Norway Norway 63,009,190,753 -29.1% 9
Nepal Nepal 3,292,017,705 +77.3% 30
New Zealand New Zealand -134,435,411 -98.8% 59
Pakistan Pakistan 643,000,000 -132% 43
Panama Panama -2,956,623,203 +2.43% 91
Peru Peru 5,058,598,215 -368% 27
Philippines Philippines -17,029,204,241 +71.4% 104
Poland Poland -6,824,000,000 -143% 97
Portugal Portugal 10,499,706,136 +71.8% 21
Paraguay Paraguay -2,165,411,194 +258% 85
Palestinian Territories Palestinian Territories -2,190,255,040 +29.5% 86
Qatar Qatar 36,343,131,868 -0.184% 16
Romania Romania -22,983,063,068 +84.8% 106
Russia Russia 53,009,890,000 +37% 12
Saudi Arabia Saudi Arabia -24,562,827,460 -376% 108
Singapore Singapore 95,621,922,319 +5.92% 5
Solomon Islands Solomon Islands 41,078,851 -143% 53
El Salvador El Salvador -1,496,962,756 +61.4% 81
Suriname Suriname 179,736,052 +228% 50
Slovakia Slovakia -2,681,341,706 -4.24% 89
Slovenia Slovenia 2,701,980,260 +15.2% 32
Sweden Sweden 83,870,289,214 +128% 7
Thailand Thailand 28,552,497,260 +98% 17
Tajikistan Tajikistan 1,081,733,932 +11% 39
Timor-Leste Timor-Leste 446,280,949 +1,161% 46
Tonga Tonga 27,600,673 +78.2% 54
Trinidad & Tobago Trinidad & Tobago 487,344,452 -52.9% 45
Turkey Turkey -22,795,000,000 -55.7% 105
Ukraine Ukraine -8,352,000,000 +6.38% 100
Uruguay Uruguay 414,566,483 -121% 47
United States United States -1,268,835,000,000 +37.3% 113
Uzbekistan Uzbekistan -7,415,057,100 -20.9% 99
St. Vincent & Grenadines St. Vincent & Grenadines -172,021,443 -15.8% 62
Vietnam Vietnam -1,138,000,000 -113% 76
Samoa Samoa 105,213,332 -27.9% 52
South Africa South Africa -3,390,309,388 +12.9% 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 = 'BN.FIN.TOTL.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 <- 'BN.FIN.TOTL.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))