Îmbinarea DataFrame-urilor după condiție sau cea mai apropiată potrivire

Transformarea datelor cu Polars

Liam Brannigan

Data Scientist & Polars Contributor

Îmbinare după condiție

Un singur tabel cu câștigătorii Cupei Mondiale

Transformarea datelor cu Polars

Îmbinare după condiție

Un tabel cu câștigătorii Cupei Mondiale și un tabel cu numărul minim de victorii pentru categoriile argint și aur.

Transformarea datelor cu Polars

Îmbinare după condiție

Un tabel cu câștigătorii Cupei Mondiale, un tabel cu nivelurile și un tabel rezultat cu câștigătorii și nivelurile obținute

Transformarea datelor cu Polars

Îmbinare după condiție

Un tabel cu câștigătorii Cupei Mondiale, un tabel cu nivelurile și un tabel rezultat cu câștigătorii și nivelurile obținute, cu două rânduri pentru Brazilia evidențiate.

Transformarea datelor cu Polars

Utilizatorii aplicației și preferințele lor

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        |
Transformarea datelor cu Polars

Tabelul utilizatorilor

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        |
Transformarea datelor cu Polars

Îmbinare după condiție

restaurants.join_where(


)
Transformarea datelor cu Polars

Îmbinare după condiție

restaurants.join_where(
    users,

)
Transformarea datelor cu Polars

Îmbinare după condiție

restaurants.join_where(
    users,
    pl.col("type") == pl.col("type_right")
)
Transformarea datelor cu Polars

Îmbinare după condiție

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     |
Transformarea datelor cu Polars

Îmbinare după mai multe condiții

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é       | ... |
Transformarea datelor cu Polars

Îmbinare după cele mai recente valori

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      |

$$

  • Scop: asocierea fiecărei recenzii cu inspecția cea mai relevantă
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   |
Transformarea datelor cu Polars

Îmbinare după cele mai recente valori

reviews.sort("date").join_asof(



)

$$

$$

$$

$$

  • join_asof - îmbinare începând cu o anumită dată
Transformarea datelor cu Polars

Îmbinare după cele mai recente valori

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


)
Transformarea datelor cu Polars

Îmbinare după cele mai recente valori

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

)
Transformarea datelor cu Polars

Îmbinare după cele mai recente valori

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      |
Transformarea datelor cu Polars

Îmbinare după cea mai apropiată valoare

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      |
Transformarea datelor cu Polars

Alegerea unei strategii

$$

Diagramă cu două tabele de serii de timp, fiecare cu două rânduri.

Transformarea datelor cu Polars

Alegerea unei strategii - înapoi

$$

Diagramă cu două tabele de serii de timp, cu săgeți care leagă ambele rânduri din stânga de primul rând din dreapta.

Transformarea datelor cu Polars

Alegerea unei strategii - cel mai aproape

$$

Diagramă cu două tabele de serii de timp, cu săgeți care leagă fiecare rând din stânga de rândul corespunzător din dreapta.

Transformarea datelor cu Polars

Alegerea unei strategii - înainte

$$

Diagramă cu două tabele de serii de timp, cu săgeți care leagă ambele rânduri din stânga de al doilea rând din dreapta.

Transformarea datelor cu Polars

Potrivire în cadrul grupurilor

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      |
Transformarea datelor cu Polars

Hai să exersăm!

Transformarea datelor cu Polars

Preparing Video For Download...