Giter VIP home page Giter VIP logo

Comments (2)

mcrumiller avatar mcrumiller commented on September 24, 2024

A join_asof should accomplish this for you as a LEFT ANY JOIN. You may have to play with some of the parameters depending on your use case.

import polars as pl

df1 = pl.DataFrame({
    "key": [1, 2, 3],
    "a": [1, 2, 3],
}).set_sorted("key")

df2 = pl.DataFrame({
    "key": [1, 2, 2, 3, 3],
    "a": [1, 2, 3, 4, 5],
}).set_sorted("key")

print(df1.join_asof(df2, on="key"))
shape: (3, 3)
┌─────┬─────┬─────────┐
│ key ┆ a   ┆ a_right │
│ --- ┆ --- ┆ ---     │
│ i64 ┆ i64 ┆ i64     │
╞═════╪═════╪═════════╡
│ 1   ┆ 1   ┆ 1       │
│ 2   ┆ 2   ┆ 3       │
│ 3   ┆ 3   ┆ 5       │
└─────┴─────┴─────────┘

For a RIGHT ANY JOIN you can swap the dataframes, as polars does not support a right-join right now, although there is an open issue for this feature.

In the general case, you can always call df1.join(df2.unique(subet=join_key), ...) to accomplish your task.

from polars.

knl avatar knl commented on September 24, 2024

I don't think asof_join is a valid workaround for my question, namely because it has tolerance, and requires sorted dataframes.

For example, the following would return a non-empty dataframe, while in proposal:

  • ANY INNER should return empty dataframe
  • ANY LEFT should return empty a_right.
import polars as pl

df1 = pl.DataFrame({
    "key": [1, 10, 20],
    "a": [1, 2, 3],
}).set_sorted("key")

df2 = pl.DataFrame({
    "key": [2, 8, 9, 13, 18],
    "a": [1, 2, 3, 4, 5],
}).set_sorted("key")

print(df1.join_asof(df2, on="key"))
>>> print(df1.join_asof(df2, on="key"))
shape: (3, 3)
┌─────┬─────┬─────────┐
│ key ┆ a   ┆ a_right │
│ --- ┆ --- ┆ ---     │
│ i64 ┆ i64 ┆ i64     │
╞═════╪═════╪═════════╡
│ 1   ┆ 1   ┆ null    │
│ 10  ┆ 2   ┆ 3       │
│ 20  ┆ 3   ┆ 5       │
└─────┴─────┴─────────┘

from polars.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.