Gộp DataFrame theo điều kiện hoặc giá trị gần nhất

Biến đổi dữ liệu với Polars

Liam Brannigan

Data Scientist & Polars Contributor

Gộp theo điều kiện

Một bảng duy nhất hiển thị các nhà vô địch World Cup

Biến đổi dữ liệu với Polars

Gộp theo điều kiện

Một bảng hiển thị các nhà vô địch World Cup và một bảng hiển thị số trận thắng tối thiểu cho hạng bạc và vàng.

Biến đổi dữ liệu với Polars

Gộp theo điều kiện

Một bảng hiển thị các nhà vô địch World Cup, một bảng hiển thị các mức và một bảng đã gộp của nhà vô địch với mức đạt được

Biến đổi dữ liệu với Polars

Gộp theo điều kiện

Một bảng hiển thị các nhà vô địch World Cup, một bảng hiển thị các mức và một bảng đã gộp với hai hàng của Brazil được tô sáng.

Biến đổi dữ liệu với Polars

Người dùng ứng dụng và thị hiếu

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        |
Biến đổi dữ liệu với Polars

Bảng 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        |
Biến đổi dữ liệu với Polars

Gộp theo điều kiện

restaurants.join_where(


)
Biến đổi dữ liệu với Polars

Gộp theo điều kiện

restaurants.join_where(
    users,

)
Biến đổi dữ liệu với Polars

Gộp theo điều kiện

restaurants.join_where(
    users,
    pl.col("type") == pl.col("type_right")
)
Biến đổi dữ liệu với Polars

Gộp theo điều kiện

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     |
Biến đổi dữ liệu với Polars

Gộp theo nhiều điều kiện

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é       | ... |
Biến đổi dữ liệu với Polars

Gộp theo giá trị gần nhất theo thời gian

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      |

$$

  • Nhiệm vụ: khớp mỗi đánh giá với lần kiểm tra phù hợp nhất
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   |
Biến đổi dữ liệu với Polars

Gộp theo giá trị gần nhất theo thời gian

reviews.sort("date").join_asof(



)

$$

$$

$$

$$

  • join_asof - gộp theo mốc thời gian gần trước
Biến đổi dữ liệu với Polars

Gộp theo giá trị gần nhất theo thời gian

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


)
Biến đổi dữ liệu với Polars

Gộp theo giá trị gần nhất theo thời gian

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

)
Biến đổi dữ liệu với Polars

Gộp theo giá trị gần nhất theo thời gian

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      |
Biến đổi dữ liệu với Polars

Gộp theo giá trị gần nhất

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      |
Biến đổi dữ liệu với Polars

Chọn chiến lược

$$

Sơ đồ với hai bảng chuỗi thời gian, mỗi bảng có hai hàng.

Biến đổi dữ liệu với Polars

Chọn chiến lược - backward

$$

Sơ đồ với hai bảng chuỗi thời gian, mũi tên nối cả hai hàng bên trái đến hàng đầu tiên bên phải.

Biến đổi dữ liệu với Polars

Chọn chiến lược - nearest

$$

Sơ đồ với hai bảng chuỗi thời gian, mũi tên nối mỗi hàng bên trái với hàng tương ứng bên phải.

Biến đổi dữ liệu với Polars

Chọn chiến lược - forward

$$

Sơ đồ với hai bảng chuỗi thời gian, mũi tên nối cả hai hàng bên trái đến hàng thứ hai bên phải.

Biến đổi dữ liệu với Polars

Khớp trong nhóm

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      |
Biến đổi dữ liệu với Polars

Ayo berlatih!

Biến đổi dữ liệu với Polars

Preparing Video For Download...