Documentation v0.3.0
Urban PM2.5, monthly
Monthly mean surface PM2.5 concentrations derived from ACAG gridded data.
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.
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#
| Name | Type | Units | Description |
|---|---|---|---|
id | string | — | Parent or child city identifier. |
version | string | — | Boundary version. |
boundary_level | string | — | PARENT, ADM1 or ADM2. |
pm25_year | int32 | — | Year of the observation. |
pm25_month | int32 | — | Month of the observation, 1-12. |
pm25_version | string | — | Upstream raster data version this observation came from. |
pm25_mean | float64 | µg/m³ | Mean surface PM2.5 inside the polygon for the month. |
pm25_cell_count | float64 | — | 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
Washington University in St. Louis, Atmospheric Composition Analysis Group — surface PM2.5. https://sites.wustl.edu/acag/datasets/surface-pm2-5/
Urban Growth Center
Development Data Lab. (2026). Urban Growth Center. https://cities.devdatalab.org/