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

如何在Polars中合并DataFrame,避免连接列重复显示?

解决Polars多列全外连接后连接列重复的问题

直接用on指定连接列,配合提前给非连接列加后缀的方式,就能一步得到符合要求的结果,完全不用手动去重:

步骤说明

  1. 对齐连接列名:确保两个DataFrame的连接列名称一致(如果不一致先重命名对齐)
  2. 给非连接列加区分后缀:左表非连接列加_x,右表非连接列加_y
  3. 执行全外连接:用on指定连接列,Polars会自动只保留一组连接列,非连接列已经带好后缀不会冲突

代码示例

假设我们有两个带多连接列的DataFrame:

import polars as pl

# 左表
df_left = pl.DataFrame({
    "id": [1, 2, 3],
    "category": ["A", "B", "C"],
    "value": [10, 20, 30],
    "score": [85, 90, 78]
})

# 右表
df_right = pl.DataFrame({
    "id": [2, 3, 4],
    "category": ["B", "C", "D"],
    "value": [200, 300, 400],
    "rating": [4.5, 4.7, 4.2]
})

# 定义连接列
join_cols = ["id", "category"]

# 给左表非连接列加_x后缀
df_left_renamed = df_left.rename(
    {col: f"{col}_x" for col in df_left.columns if col not in join_cols}
)

# 给右表非连接列加_y后缀
df_right_renamed = df_right.rename(
    {col: f"{col}_y" for col in df_right.columns if col not in join_cols}
)

# 执行全外连接(join_nulls=True可保留连接列为空的行)
final_df = df_left_renamed.join(
    df_right_renamed,
    on=join_cols,
    how="outer",
    join_nulls=True
)

print(final_df)

关键注意点

  • 必须用on参数指定连接列,而非left_on/right_on,否则Polars会保留两边的连接列导致重复
  • 提前重命名非连接列是处理大型DataFrame的高效方式,避免后续列操作的额外内存开销
  • 如果不需要_x/_y格式,也可以直接用join的suffix参数给右表重复列加后缀(比如suffix="_right"),左表非连接列保留原名

内容的提问来源于stack exchange,提问作者LukacsDominik1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:42:49