Polars join_asof含重复by值返回错误结果的问题咨询
Polars join_asof 匹配异常原因及解决方法
- 核心问题:Polars 的
join_asof有个硬性要求——左右两个 DataFrame 必须先按**分组字段(你指定的 title1/title2)和连接数值字段(year1/year2)**升序排序,否则匹配逻辑会完全偏离预期。 - 你的场景具体问题:
- 要么是 df1 里的 abc 组没有按
year1升序排列(比如 2016 行排在 2000 行后面),要么是 df2 里的 abc 组没有按year2升序排列(比如 2018 行排在 2001 行前面)。 join_asof是基于行的遍历顺序来找最近值的,不是全局数值匹配。比如如果 df2 的 abc 组里 2018 行在前、2001 行在后,当处理 df1 的 2000 行时,程序只会从 df2 已经扫过的行(也就是 2018)里找最近值,不会往后看 2001 那一行,结果自然就错配了。
- 要么是 df1 里的 abc 组没有按
- 解决办法:
- 先给 df1 按分组和连接字段排序:
df1 = df1.sort(["title1", "year1"]) - 再给 df2 做同样的排序:
df2 = df2.sort(["title2", "year2"]) - 重新执行你的
join_asof操作,就能得到预期的匹配结果了。
- 先给 df1 按分组和连接字段排序:
内容的提问来源于stack exchange,提问作者Elis Evans
相关产品推荐
相关产品推荐

