Код: Выделить всё
import polars as pl
df1 = pl.from_repr("""
┌────────┬───────┐
│ title1 ┆ year1 │
│ --- ┆ --- │
│ str ┆ i64 │
╞════════╪═══════╡
│ abc ┆ 2016 │
│ abc ┆ 2000 │
│ def ┆ 1934 │
└────────┴───────┘
""")
df2 = pl.from_repr("""
┌────────┬───────────┬───────┬──────┐
│ title2 ┆ director2 ┆ year2 ┆ val2 │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 ┆ str │
╞════════╪═══════════╪═══════╪══════╡
│ abc ┆ john ┆ 2001 ┆ A │
│ abc ┆ paul ┆ 2018 ┆ B │
│ def ┆ peter ┆ 2016 ┆ C │
└────────┴───────────┴───────┴──────┘
""")
Код: Выделить всё
df1.join_asof(df2, left_on = "year1", right_on = "year2", by_left = ["title1"], by_right = ["title2"], strategy = "nearest")
Код: Выделить всё
┌────────┬───────┬───────────┬───────┬──────┐
│ title1 ┆ year1 ┆ director2 ┆ year2 ┆ val2 │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str ┆ i64 ┆ str │
╞════════╪═══════╪═══════════╪═══════╪══════╡
│ abc ┆ 2016 ┆ paul ┆ 2018 ┆ B │
│ abc ┆ 2000 ┆ paul ┆ 2018 ┆ B │
│ def ┆ 1934 ┆ peter ┆ 2016 ┆ C │
└────────┴───────┴───────────┴───────┴──────┘
Чтобы внести ясность, я ожидал, что результат будет следующим:
Код: Выделить всё
expected = pl.from_repr("""
┌────────┬───────┬───────────┬───────┬──────┐
│ title1 ┆ year1 ┆ director2 ┆ year2 ┆ val2 │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str ┆ i64 ┆ str │
╞════════╪═══════╪═══════════╪═══════╪══════╡
│ abc ┆ 2016 ┆ paul ┆ 2018 ┆ B │
│ abc ┆ 2000 ┆ john ┆ 2001 ┆ A │
│ def ┆ 1934 ┆ peter ┆ 2016 ┆ C │
└────────┴───────┴───────────┴───────┴──────┘
""")
Подробнее здесь: https://stackoverflow.com/questions/784 ... ng-results
Мобильная версия