You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars中使用left_on和right_on关联DataFrame后如何保留两侧连接列?

Polars中使用left_on和right_on关联DataFrame后如何保留两侧连接列?

嘿,这个问题我太熟了!Polars默认在使用left_on和right_on做join的时候,会自动丢弃右侧的连接列——因为它默认认为这两列的值是完全相等的(毕竟是连接条件嘛),但如果你确实需要像SQL里SELECT *那样同时保留两侧的连接列,只需要一个参数就能搞定!

先看你给出的默认join结果,确实rk列消失了:

print(df1.join(df2, how="inner", left_on="lk", right_on="rk"))

输出:

shape: (3, 3)
┌─────┬─────┬─────┐
│ a   ┆ lk  ┆ b   │
│ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str │
╞═════╪═════╪═════╡
│ x   ┆ 1   ┆ x   │
│ y   ┆ 2   ┆ y   │
│ z   ┆ 3   ┆ z   │
└─────┴─────┴─────┘

解决方法超简单,在join的时候加上keep_right=True参数就行,这样就能保留右侧的连接列rk了:

result = df1.join(df2, how="inner", left_on="lk", right_on="rk", keep_right=True)
print(result)

这时候的输出就会同时保留lk和rk两列:

shape: (3, 4)
┌─────┬─────┬─────┬─────┐
│ a   ┆ lk  ┆ b   ┆ rk  │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str ┆ i64 │
╞═════╪═════╪═════╪═════╡
│ x   ┆ 1   ┆ x   ┆ 1   │
│ y   ┆ 2   ┆ y   ┆ 2   │
│ z   ┆ 3   ┆ z   ┆ 3   │
└─────┴─────┴─────┴─────┘

这里再补个小知识点:Polars的join方法里,keep_left和keep_right是分别控制是否保留左、右连接列的参数,默认keep_left=True(所以你能看到lk列)、keep_right=False(这就是rk列消失的原因)。只要把keep_right设为True,就能完美复刻你要的SQL全列保留效果啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:12:58