Documentation v0.3.0

Urban PM2.5, monthly

Monthly mean surface PM2.5 concentrations derived from ACAG gridded data.

Granularity
City, ADM1 split, ADM2 split
Format
Parquet
Time resolution
Monthly
Module version
v0.3.0
License
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License

Coverage and granularity#

Every DDL boundary that overlaps the upstream grid, at parent, ADM1 and ADM2 level.

9,849 of 9,849 parent cities · 1998–2024 · 4,330,584 rows across the package

  • City: 9,849 of 9,849 boundary IDs
  • ADM1: 387 of 387 boundary IDs
  • ADM2: 3,130 of 3,130 boundary IDs

Row key: id, version, pm25_year, pm25_month

Examples in the City Explorer: New Delhi, Lagos, Melbourne.

Source: Washington University in St. Louis, Atmospheric Composition Analysis Group — surface PM2.5

Joining this data#

A Python example using GeoPandas and pandas. Replace the file paths with your local downloads. See boundary levels and join keys.

Python
import geopandas as gpd
import pandas as pd

# Match the boundary file to the module's geographic level.
level = "PARENT"
boundaries = gpd.read_file("parent.gpkg")
observations = pd.read_parquet("ddl-pm25-monthly.parquet")
observations = observations.loc[observations["boundary_level"].eq(level)]

joined = boundaries.merge(
    observations, on="id", how="left", validate="one_to_many"
)
print(joined.head())

Methodology#

Upstream monthly surface PM2.5 estimates come from the WUSTL Atmospheric Composition Analysis Group's global 0.01-degree grid, which combines satellite aerosol optical depth retrievals, a chemical transport model, and ground monitor calibration. For each month we run zonal statistics on that grid against each DDL boundary polygon, producing an area-weighted mean and the contributing cell count.

Schema#

NameTypeUnitsDescription
idstring—Parent or child city identifier.
versionstring—Boundary version.
boundary_levelstring—PARENT, ADM1 or ADM2.
pm25_yearint32—Year of the observation.
pm25_monthint32—Month of the observation, 1-12.
pm25_versionstring—Upstream raster data version this observation came from.
pm25_meanfloat64µg/m³Mean surface PM2.5 inside the polygon for the month.
pm25_cell_countfloat64—Number of grid cells contributing to pm25_mean.

Notes#

  • Partial grid cells are area-weighted when calculating the mean surface PM2.5 for the polygon.

Citation#

When using these data, cite Urban Growth Center and the original source below, where applicable.

Original source

Citation
Washington University in St. Louis, Atmospheric Composition Analysis Group — surface PM2.5. https://sites.wustl.edu/acag/datasets/surface-pm2-5/

View original source

Urban Growth Center

Citation
Development Data Lab. (2026). Urban Growth Center. https://cities.devdatalab.org/