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
相关产品推荐
相关产品推荐

