Assembler des DataFrames par condition ou correspondance la plus proche

Transformation de données avec Polars

Liam Brannigan

Data Scientist & Polars Contributor

Jointure sur une condition

Une seule table montrant les gagnants de la Coupe du monde

Transformation de données avec Polars

Jointure sur une condition

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

Transformation de données avec Polars

Jointure sur une condition

Une table des gagnants de la Coupe du monde, une table des niveaux et une table jointe des gagnants avec le niveau atteint

Transformation de données avec Polars

Jointure sur une condition

Une table des gagnants de la Coupe du monde, une table des niveaux et une table jointe des gagnants avec le niveau atteint, avec deux lignes pour le Brésil mises en évidence.

Transformation de données avec Polars

Utilisateurs de l'appli 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 des utilisateurs

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 une condition

restaurants.join_where(


)
Transformation de données avec Polars

Jointure sur une condition

restaurants.join_where(
    users,

)
Transformation de données avec Polars

Jointure sur une condition

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

Jointure sur une 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      |

$$

  • Tâche : faire correspondre 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 : joindre à la 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 chronologiques, deux lignes chacune.

Transformation de données avec Polars

Choisir une stratégie – arrière

$$

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

Transformation de données avec Polars

Choisir une stratégie – la plus proche

$$

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

Transformation de données avec Polars

Choisir une stratégie – avant

$$

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

Transformation de données avec Polars

Correspondance à l'intérieur des 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...