Current account balance (BoP, current US$)

Source: worldbank.org, 01.09.2025

Year: 2024

Flag Country Value Value change, % Rank
Angola Angola 6,309,847,179 +50.8% 28
Albania Albania -646,106,647 +129% 69
Argentina Argentina 6,285,327,867 -130% 29
Armenia Armenia -997,085,510 +79.2% 74
Antigua & Barbuda Antigua & Barbuda -181,365,884 -33.1% 63
Australia Australia -34,401,700,426 +563% 110
Austria Austria 12,641,827,066 +86.4% 21
Azerbaijan Azerbaijan 4,671,108,000 -43.9% 32
Belgium Belgium -5,678,970,571 +26.1% 96
Bangladesh Bangladesh 1,870,437,041 -57.4% 39
Bulgaria Bulgaria -2,014,020,000 +125% 85
Bahrain Bahrain 2,281,914,894 -15.5% 35
Bahamas Bahamas -1,052,660,800 -1.54% 76
Bosnia & Herzegovina Bosnia & Herzegovina -1,175,817,310 +84.1% 77
Belarus Belarus -1,924,723,790 +74.4% 84
Belize Belize -51,761,738 +162% 56
Brazil Brazil -61,194,266,837 +119% 111
Brunei Brunei 2,229,654,630 +14.7% 36
Bhutan Bhutan -669,766,414 -30.5% 70
Canada Canada -10,348,860,554 -24.8% 103
Switzerland Switzerland 47,161,822,804 -0.617% 12
Chile Chile -4,852,716,811 -53.8% 95
China China 423,919,214,716 +61% 1
Colombia Colombia -7,412,357,119 -10.5% 100
Cape Verde Cape Verde 101,071,630 -257% 51
Costa Rica Costa Rica -1,290,723,122 +4.16% 79
Cyprus Cyprus -3,049,502,391 -20.4% 91
Czechia Czechia 6,046,872,750 -1,497% 30
Germany Germany 267,056,465,885 +6.19% 2
Djibouti Djibouti 610,123,618 -15.4% 49
Dominica Dominica -160,119,800 -28.4% 61
Denmark Denmark 55,901,323,646 +39.5% 9
Dominican Republic Dominican Republic -4,167,200,000 -5.69% 94
Ecuador Ecuador 7,082,325,673 +219% 25
Spain Spain 52,181,959,164 +21.3% 11
Estonia Estonia -489,659,276 -32.2% 66
Finland Finland 930,392,658 -159% 44
France France 12,382,285,798 -141% 22
United Kingdom United Kingdom -96,634,360,951 -18.4% 112
Georgia Georgia -1,491,480,747 -12.7% 81
Gambia Gambia -74,374,344 -38.1% 59
Greece Greece -16,398,946,894 +9.27% 106
Grenada Grenada -270,770,770 +11.2% 64
Guatemala Guatemala 3,332,714,410 +3.76% 33
Hong Kong SAR China Hong Kong SAR China 52,474,997,829 +62.3% 10
Honduras Honduras -1,710,733,547 +25.1% 83
Croatia Croatia -1,049,215,175 -265% 75
Hungary Hungary 5,073,599,496 +576% 31
Indonesia Indonesia -8,470,126,542 +315% 101
India India -32,428,396,011 +1.46% 109
Iceland Iceland -845,318,645 -391% 72
Israel Israel 16,712,900,000 -10.2% 19
Italy Italy 26,760,074,787 +721% 17
Jamaica Jamaica 678,808,379 +19.3% 48
Japan Japan 194,256,992,630 +24.1% 3
Kazakhstan Kazakhstan -3,701,923,927 -60.8% 92
Cambodia Cambodia 222,107,652 -59.8% 50
St. Kitts & Nevis St. Kitts & Nevis -169,220,834 +38.3% 62
South Korea South Korea 99,042,900,000 +202% 5
Kuwait Kuwait 46,702,599,439 -9.13% 13
St. Lucia St. Lucia -64,121,335 +68.4% 57
Lesotho Lesotho 84,393,245 -156% 52
Lithuania Lithuania 2,100,562,283 +139% 37
Luxembourg Luxembourg 12,876,667,963 +30.6% 20
Latvia Latvia -923,266,032 -44.5% 73
Moldova Moldova -2,917,000,000 +54.1% 90
Maldives Maldives -1,256,651,067 -10.2% 78
Mexico Mexico -5,985,787,271 +6.69% 99
North Macedonia North Macedonia -374,385,192 -762% 65
Malta Malta 1,383,010,276 -2.92% 42
Montenegro Montenegro -1,405,756,353 +65.1% 80
Mozambique Mozambique -2,498,192,202 +13.2% 88
Malaysia Malaysia 7,150,093,156 +14.3% 24
Namibia Namibia -2,054,992,843 +8.54% 86
Nigeria Nigeria 17,215,269,316 +168% 18
Nicaragua Nicaragua 817,618,290 -44.2% 46
Netherlands Netherlands 121,824,634,490 +7.17% 4
Norway Norway 82,510,707,608 -1.89% 7
Nepal Nepal 1,953,752,174 +1,232% 38
New Zealand New Zealand -15,978,248,932 -6.37% 105
Pakistan Pakistan 699,220,448 -167% 47
Panama Panama 1,672,221,431 -165% 41
Peru Peru 6,389,979,050 +625% 27
Philippines Philippines -17,514,262,288 +41.4% 107
Poland Poland 1,789,000,000 -87.7% 40
Portugal Portugal 6,707,848,339 +313% 26
Paraguay Paraguay -1,666,041,994 +843% 82
Palestinian Territories Palestinian Territories -2,899,047,119 +0.127% 89
Qatar Qatar 38,117,307,692 +4.57% 15
Romania Romania -31,987,919,226 +30.8% 108
Russia Russia 62,286,740,000 +26% 8
Saudi Arabia Saudi Arabia -5,684,707,140 -116% 97
Singapore Singapore 96,015,191,957 +7.4% 6
Solomon Islands Solomon Islands -66,230,866 -62.8% 58
El Salvador El Salvador -632,548,681 +72% 68
Suriname Suriname 9,306,201 -93.7% 54
Slovakia Slovakia -3,894,871,949 +233% 93
Slovenia Slovenia 3,231,108,292 +4.48% 34
Sweden Sweden 45,274,385,255 +10.9% 14
Thailand Thailand 11,089,443,402 +49.6% 23
Tajikistan Tajikistan 887,016,211 +51.9% 45
Timor-Leste Timor-Leste -529,737,508 +199% 67
Tonga Tonga -21,165,212 -29.7% 55
Trinidad & Tobago Trinidad & Tobago 1,117,271,577 -62.1% 43
Turkey Turkey -9,973,000,000 -75% 102
Ukraine Ukraine -13,749,000,000 +43.8% 104
Uruguay Uruguay -821,379,734 -68.9% 71
United States United States -1,133,619,000,000 +25.2% 113
Uzbekistan Uzbekistan -5,737,948,511 -26.4% 98
St. Vincent & Grenadines St. Vincent & Grenadines -156,588,993 -13.2% 60
Vietnam Vietnam 28,047,000,000 +8.74% 16
Samoa Samoa 64,615,764 +60.8% 53
South Africa South Africa -2,383,641,616 -61.2% 87

                    
# 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.CAB.XOKA.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.CAB.XOKA.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))