การ Join DataFrame ด้วยเงื่อนไขหรือค่าที่ใกล้เคียงที่สุด

การแปลงข้อมูลด้วย Polars

Liam Brannigan

Data Scientist & Polars Contributor

การ Join ด้วยเงื่อนไข

ตารางเดียวที่แสดงแชมป์ฟุตบอลโลก

การแปลงข้อมูลด้วย Polars

การ Join ด้วยเงื่อนไข

ตารางแสดงแชมป์ฟุตบอลโลก และตารางแสดงจำนวนชนะขั้นต่ำสำหรับระดับ Silver และ Gold

การแปลงข้อมูลด้วย Polars

การ Join ด้วยเงื่อนไข

ตารางแชมป์ฟุตบอลโลก ตารางระดับ และตาราง Join ที่แสดงแชมป์พร้อมระดับที่ได้รับ

การแปลงข้อมูลด้วย Polars

การ Join ด้วยเงื่อนไข

ตารางแชมป์ฟุตบอลโลก ตารางระดับ และตาราง Join ที่แสดงแชมป์พร้อมระดับที่ได้รับ โดยไฮไลต์สองแถวของบราซิล

การแปลงข้อมูลด้วย Polars

ผู้ใช้แอปและความต้องการ

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        |
การแปลงข้อมูลด้วย Polars

ตาราง 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        |
การแปลงข้อมูลด้วย Polars

การ Join ด้วยเงื่อนไข

restaurants.join_where(


)
การแปลงข้อมูลด้วย Polars

การ Join ด้วยเงื่อนไข

restaurants.join_where(
    users,

)
การแปลงข้อมูลด้วย Polars

การ Join ด้วยเงื่อนไข

restaurants.join_where(
    users,
    pl.col("type") == pl.col("type_right")
)
การแปลงข้อมูลด้วย Polars

การ Join ด้วยเงื่อนไข

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     |
การแปลงข้อมูลด้วย Polars

การ Join ด้วยหลายเงื่อนไข

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é       | ... |
การแปลงข้อมูลด้วย Polars

การ Join ด้วยค่าล่าสุด

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      |

$$

  • งาน: จับคู่รีวิวแต่ละรายการกับการตรวจสอบที่เกี่ยวข้องที่สุด
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   |
การแปลงข้อมูลด้วย Polars

การ Join ด้วยค่าล่าสุด

reviews.sort("date").join_asof(



)

$$

$$

$$

$$

  • join_asof - join ณ วันที่ที่กำหนด
การแปลงข้อมูลด้วย Polars

การ Join ด้วยค่าล่าสุด

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


)
การแปลงข้อมูลด้วย Polars

การ Join ด้วยค่าล่าสุด

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

)
การแปลงข้อมูลด้วย Polars

การ Join ด้วยค่าล่าสุด

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      |
การแปลงข้อมูลด้วย Polars

การ Join ด้วยค่าที่ใกล้เคียงที่สุด

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      |
การแปลงข้อมูลด้วย Polars

การเลือก strategy

$$

ไดอะแกรมแสดงสองตารางข้อมูลอนุกรมเวลา แต่ละตารางมีสองแถว

การแปลงข้อมูลด้วย Polars

การเลือก strategy - backwards

$$

ไดอะแกรมแสดงสองตารางข้อมูลอนุกรมเวลา พร้อมลูกศรที่จับคู่ทั้งสองแถวทางซ้ายกับแถวแรกทางขวา

การแปลงข้อมูลด้วย Polars

การเลือก strategy - nearest

$$

ไดอะแกรมแสดงสองตารางข้อมูลอนุกรมเวลา พร้อมลูกศรที่จับคู่แต่ละแถวทางซ้ายกับแถวที่สอดคล้องกันทางขวา

การแปลงข้อมูลด้วย Polars

การเลือก strategy - forwards

$$

ไดอะแกรมแสดงสองตารางข้อมูลอนุกรมเวลา พร้อมลูกศรที่จับคู่ทั้งสองแถวทางซ้ายกับแถวที่สองทางขวา

การแปลงข้อมูลด้วย Polars

การจับคู่ภายในกลุ่ม

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      |
การแปลงข้อมูลด้วย Polars

มาฝึกกันเถอะ!

การแปลงข้อมูลด้วย Polars

Preparing Video For Download...