Joindre des DataFrames par condition ou correspondance la plus proche

Transformation de données avec Polars

Liam Brannigan

Data Scientist & Polars Contributor

Jointure sur condition

Une seule table montrant les vainqueurs de la Coupe du monde

Transformation de données avec Polars

Jointure sur condition

Une table montrant les vainqueurs de la Coupe du monde et une table indiquant les victoires minimales pour les catégories argent et or.

Transformation de données avec Polars

Jointure sur condition

Une table montrant les vainqueurs de la Coupe du monde, une table montrant les niveaux et une table jointe des vainqueurs et des niveaux atteints

Transformation de données avec Polars

Jointure sur condition

Une table montrant les vainqueurs de la Coupe du monde, une table montrant les niveaux, et une table jointe des vainqueurs et niveaux atteints avec deux lignes pour le Brésil mises en évidence.

Transformation de données avec Polars

Utilisateurs de l’app avec préférences

restaurants = pl.read_csv("restuarants.csv")
shape: (4, 5)
| business        | location    | review | price | type       |
| ---             | ---         | ---    | ---   | ---        |
| str             | str         | f64    | i64   | str        |
|-----------------|-------------|--------|-------|------------|
| 7burgers        | Wakey Wakey | 4.2    | 15    | restaurant |
| Costa Coffee    | City Point  | 4.5    | 8     | café       |
| Costa Coffee    | Waterloo    | 4.1    | 8     | café       |
| The Queens Head | Denman St.  | 4.7    | 25    | bar        |
Transformation de données avec Polars

La table users

users = pl.read_csv("app_users.csv")
shape: (3, 3)
| user_name | budget | type       |
| ---       | ---    | ---        |
| str       | i64    | str        |
|-----------|--------|------------|
| Bob       | 12     | café       |
| Alice     | 15     | restaurant |
| Charlie   | 22     | bar        |
Transformation de données avec Polars

Jointure sur condition

restaurants.join_where(


)
Transformation de données avec Polars

Jointure sur condition

restaurants.join_where(
    users,

)
Transformation de données avec Polars

Jointure sur condition

restaurants.join_where(
    users,
    pl.col("type") == pl.col("type_right")
)
Transformation de données avec Polars

Jointure sur condition

restaurants.join_where(
    users,
    pl.col("type") == pl.col("type_right")
)
shape: (4, 8)
| business        | type       | ... | user_name | budget |
| ---             | ---        | ... | ---       | ---    |
| str             | str        | ... | str       | i64    |
|-----------------|------------|-----|-----------|--------|
| 7burgers        | restaurant | ... | Alice     | 15     |
| Costa Coffee    | café       | ... | Bob       | 12     |
| Costa Coffee    | café       | ... | Bob       | 12     |
| The Queens Head | bar        | ... | Charlie   | 22     |
Transformation de données avec Polars

Jointure sur plusieurs conditions

restaurants.join_where(
    users,
    pl.col("type") == pl.col("type_right"),
    pl.col("price") <= pl.col("budget")
)
shape: (3, 8)
| user_name | budget | business     | price | type       | ... |
| ---       | ---    | ---          | ---   | ---        | ... |
| str       | i64    | str          | i64   | str        | ... |
|-----------|--------|--------------|-------|------------|-----|
| Alice     | 15     | 7burgers     | 15    | restaurant | ... |
| Bob       | 12     | Costa Coffee | 8     | café       | ... |
| Bob       | 12     | Costa Coffee | 8     | café       | ... |
Transformation de données avec Polars

Jointure sur les valeurs les plus récentes

shape: (4, 3)
| business | date        | rating |
| ---      | ---         | ---    |
| str      | date        | i64    |
|----------|-------------|--------|
| 7burgers | 2025-03-15  | 5      |
| 7burgers | 2025-06-20  | 3      |
| 7burgers | 2025-09-10  | 4      |
| 7burgers | 2025-11-25  | 5      |

$$

  • Objectif : associer chaque avis à l’inspection la plus pertinente
shape: (3, 4)
| user   | business | date       | score |
| ---    | ---      | ---        | ---   |
| str    | str      | date       | f64   |
|--------|----------|------------|-------|
| Charlie | 7burgers | 2025-05-01 | 3.8   |
| Bob     | 7burgers | 2025-08-01 | 4.2   |
| Alice   | 7burgers | 2025-12-01 | 4.5   |
Transformation de données avec Polars

Jointure sur les valeurs les plus récentes

reviews.sort("date").join_asof(



)

$$

$$

$$

$$

  • join_asof - jointure à une date donnée
Transformation de données avec Polars

Jointure sur les valeurs les plus récentes

reviews.sort("date").join_asof(
    inspections.sort("date"),


)
Transformation de données avec Polars

Jointure sur les valeurs les plus récentes

reviews.sort("date").join_asof(
    inspections.sort("date"),
    on="date",

)
Transformation de données avec Polars

Jointure sur les valeurs les plus récentes

reviews.sort("date").join_asof(
    inspections.sort("date"),
    on="date",
    strategy="backward"
)
| user    | date       | score | ... | rating |
| ---     | ---        | ---   | ... | ---    |
| str     | date       | f64   | ... | i64    |
|---------|------------|-------|-----|--------|
| Charlie | 2025-05-01 | 3.8   | ... | 5      |
| Bob     | 2025-08-01 | 4.2   | ... | 3      |
| Alice   | 2025-12-01 | 4.5   | ... | 5      |
Transformation de données avec Polars

Jointure sur la valeur la plus proche

reviews.sort("date").join_asof(
    inspections.sort("date"),
    on="date",
    strategy="nearest"
)
| user    | date       | score | ... | rating |
| ---     | ---        | ---   | ... | ---    |
| str     | date       | f64   | ... | i64    |
|---------|------------|-------|-----|--------|
| Charlie | 2025-05-01 | 3.8   | ... | 5      |
| Bob     | 2025-08-01 | 4.2   | ... | 4      |
| Alice   | 2025-12-01 | 4.5   | ... | 5      |
Transformation de données avec Polars

Choisir une stratégie

$$

Schéma avec deux tables de séries temporelles, chacune avec deux lignes.

Transformation de données avec Polars

Choisir une stratégie - backward

$$

Schéma avec deux tables de séries temporelles avec des flèches associant les deux lignes de gauche à la première ligne de droite.

Transformation de données avec Polars

Choisir une stratégie - nearest

$$

Schéma avec deux tables de séries temporelles avec des flèches associant chaque ligne de gauche à la ligne correspondante de droite.

Transformation de données avec Polars

Choisir une stratégie - forward

$$

Schéma avec deux tables de séries temporelles avec des flèches associant les deux lignes de gauche à la deuxième ligne de droite.

Transformation de données avec Polars

Correspondance par groupes

reviews.sort("date").join_asof(
    restaurants.sort("date"),
    on="date",

by=["business", "location"]
)
| user    | business        | location    | date       | score | ... | rating |
| ---     | ---             | ---         | ---        | ---   | ... | ---    |
| str     | str             | str         | date       | f64   | ... | i64    |
|---------|-----------------|-------------|------------|-------|-----|--------|
| Charlie | 7burgers        | Wakey Wakey | 2025-05-01 | 3.8   | ... | null   |
| Bob     | Costa Coffee    | City Point  | 2025-05-01 | 4.0   | ... | 5      |
| Bob     | 7burgers        | Wakey Wakey | 2025-08-01 | 4.2   | ... | null   |
| Alice   | 7burgers        | Wakey Wakey | 2025-12-01 | 4.5   | ... | 4      |
| Alice   | The Queens Head | Denman St.  | 2025-12-01 | 4.7   | ... | 5      |
Transformation de données avec Polars

Passons à la pratique !

Transformation de données avec Polars

Preparing Video For Download...